lintcode 删除数字

来源:互联网 发布:个人淘宝账号永久封号 编辑:程序博客网 时间:2024/06/03 16:15

lintcode 删除数字


给出一个字符串 A, 表示一个 n 位正整数, 删除其中 k 位数字, 使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。

找到删除 k 个数字之后的最小正整数。

N <= 240, k <= N



很普通的一个贪心法。

想选择一个前面对应位数的最小值,在之后这个值背后选择对应的最小值.


class Solution {public:    string DeleteDigits(string A, int k) {        int ResultSize = A.size() - k;if(ResultSize == 1)return A;int last = 0;//上一次的位置char NowMin = 0;string Result;for(int i = 0; i != ResultSize; i++){NowMin = '9'+1;for(int j = last; j != k+i+1; j++){if(A[j] < NowMin){NowMin = A[j];last = j + 1;}}if(NowMin != '0' || Result.size()==0)Result += NowMin;;}return Result;    }};



不过我睡觉前想到了一个普遍的递归公式,利用动态规划解答。递归公式如下:

F(a,b)是数组A的区间[[a,b]的最小值的位置。

那么有F(a,b)= min(F(i,b-1),A[b]),其中F(i,b-1)表示从a,一直到b-1范围内的所有F[i,b-1]的最小值,这样我们就可以利用填矩阵的方式,求出最小值的区间了

不过这个方法在这里并不适用,相比于这个问题,这个解答的时间复杂度太大了




0 0
原创粉丝点击