可绝对贪婪问题 数字去掉几位求最小值

原创 2016年08月30日 22:46:28

参考

《算法设计与分析》

问题描述

输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原来左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。

输出应该包括所去掉的数字的位置和组成的新的正整数(N不超过240位)。

数据结构设计:高精度正整数的运算应存储为字符串格式。

问题分析

在位数固定的前提下,让高位的数字尽量小,其值就较小。依据此贪婪策略就可以解决这个问题。

如何根据贪婪策略删除数字呢?总目标是删除高位较大的数字,具体地相邻两位比较,若高位比低位大则删除高位。

代码

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def getMin(N, S):
    '''
    Function to get the min val after we remove S numbers from N.

    Example:

    >>> getMin('12435863', 3)
    '12353'
    >>> getMin('231183', 3)
    '113'
    >>> getMin('1234567', 3)
    '1234'
    >>> getMin('120083', 3)
    '3'
    >>> getMin('120083', 4)
    '0'
    '''
    src_len = len(N)
    dst_len = src_len - S
    for cnt in range(0, S):
        for i in range(1, len(N)):
            if N[i-1] > N[i]:
                N = N[:i-1] + N[i:]
                break
    if len(N) != dst_len:
        N = N[:dst_len-len(N)]
    while N[0] == '0' and len(N) != 1:
        N = N[1:]
    return N


if __name__ == '__main__':
    import doctest
    doctest.testmod()

版权声明:本文为博主原创文章,未经博主允许不得转载。

删数字

题意:给你一个N个数组成的序列,要你删除K个数后,M 表示剩下的数字中任意两个数的差值的最大值,m 表示最小差值,求M+m的最小值。分析:不断删数时,最小差值是单调不下降的,我们每次只会删最大的数或最...
  • lzxzxx
  • lzxzxx
  • 2015年08月06日 19:48
  • 268

删数问题(典型的贪心算法问题)

题目: 键盘输入一个高精度的正整数n( 去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。 编程对给定的n和s,寻找一种方案,使得剩下的数最小。 Simple Input 1785...
  • yyyyyy11123
  • yyyyyy11123
  • 2017年07月01日 20:38
  • 264

输入一个高精度的正整数n,去掉其中任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对所给的n和s,寻找一种方案使得剩下的数字组成的新数最小。

#include #include using namespace std;//从字符串v中从下标j开始删除s个字符,删除的字符保存在s_del中 void min_num(string &v, ...
  • u011954296
  • u011954296
  • 2016年04月19日 16:32
  • 3088

请写一个简单的求数组元素最大值和最小值的方法

需求:1、求数组中元素的最大值和最小值 public class ArrayMaxMin { public static void main(String[] args) { int[] ar...
  • ylyang12
  • ylyang12
  • 2016年10月20日 22:55
  • 2777

漫步微积分十六——最大最小值问题

微积分最引人注目的应用就是寻找函数的最大或最小值或者需要用到最大和最小值。日常生活充满了这样的问题,数学家和其他人觉得它们很有趣也非常重要。一个商人旨在使利润最大化和成本最小化。工程师设计的新汽车希望...
  • u010182633
  • u010182633
  • 2016年08月11日 15:39
  • 1302

寻找一个数组中的最大和最小数

工作一段快两年了,感觉之前学的数据结构和算法基本忘得差不多了,最近一段时间准备复习一下相关知识。有一个求数组中最大和最小数的题目,基本的思路是遍历一遍数组,然后每个一个元素都和最大值和最小值比较,时间...
  • tanghaiyu777
  • tanghaiyu777
  • 2017年02月16日 18:57
  • 1055

Problem E: 求最大值和最小值

Description 求出一些整数中的最大值和最小值。 Input 输入为多行,以EOF结束。每行为一个十进制的数字,全部由0~9组成,每行最长不超过1000个字符。有些数字会以0...
  • Muff_man
  • Muff_man
  • 2017年11月29日 18:07
  • 70

滑动窗口的最小值问题

滑动窗口的最小值问题 滑动窗后的最小值问题。输入正整数k和一个长度为n的整数序列A1,A2,A3,…,AnA_1, A_2, A_3, … , A_n。定义f(i)f(i)表示从元素ii开始的连续...
  • q547550831
  • q547550831
  • 2016年06月09日 12:52
  • 1827

给出n个数,找出这n个数的最大值,最小值,以及这些数字的和

问题描述给出n个数,找出这n个数的最大值,最小值,和。输入格式第一行为整数n,表示数的个数。第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。输出格式输出三行,每行一个整数。第一行表示这...
  • u012110719
  • u012110719
  • 2014年12月14日 14:01
  • 3763

MATLAB遗传算法例子二:求多元函数最小值

本文基于谢菲尔德大学遗传算法工具箱。 多元函数表达式如下: 其最小值显然在0处%定义遗传算法参数 NIND=40; %个体数目(Numbe of individua...
  • xtingjie
  • xtingjie
  • 2017年04月18日 22:19
  • 4423
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:可绝对贪婪问题 数字去掉几位求最小值
举报原因:
原因补充:

(最多只允许输入30个字)