博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
402. Remove K Digits
阅读量:5897 次
发布时间:2019-06-19

本文共 1102 字,大约阅读时间需要 3 分钟。

402. Remove K Digits

题目链接:

根据题目的描述,移掉k个数字然后得到最小值,肯定是greedy。那么greedy的feature是什么呢?

看例子,首先是1432219,k = 3,不去掉1的原因是后面接的是4,当前这一步,看到下一个数比自己大的时候移掉是不划算的,因为移掉这个数之后最高位变成4,是不如保留1小的。所以可以看出规律实际上是从msb开始只要发现比之前有比当前位大的数字,那肯定要移掉之前的数字,这样当前最高位的数字就变小了。后面的3和2需要移掉也是同理。用个Stack来保存之前递增的数字。
再看1223,k = 1, 从左往右扫一遍发现没有出现nums[i-1] > nums[i]的情况,所以第一次扫的时候删了0个,这时候就从最大值开始移。
注意10200这个例子,去掉1之后,最高位是0,也得去掉。

public class Solution {    public String removeKdigits(String num, int k) {        StringBuilder sb = new StringBuilder();        int n = num.length();        char[] stack = new char[n];        int count = 0;        // remove the digit that larger than digit after it        for(int i = 0; i < n; i++) {            while(count != 0 && k > 0 && num.charAt(i) < stack[count-1]) {                count--;                k--;            }            stack[count++] = num.charAt(i);        }        // remove 0 at the beginning        int start = 0;        while(start < count && stack[start] == '0') start++;                // remove from lsb        return start >= count - k ? "0" : new String(stack, start, count - start - k);    }}

转载地址:http://osasx.baihongyu.com/

你可能感兴趣的文章
淘宝Hadoop集群的概况
查看>>
Centos7安装rabbitmq server 3.6.0
查看>>
关于eclipse的ADT(插件)对xml的android:text属性检查修改
查看>>
linux生成自验证ssl证书的具体命令和步骤
查看>>
Mvc 提交表单的4种方法全程详解
查看>>
iostat命令学习
查看>>
SQL 三种分页方式
查看>>
查看linux是ubuntu还是centos
查看>>
html video的url更新,自动清缓存
查看>>
IOS Xib使用——为控制器添加Xib文件
查看>>
CentOS 7.0默认使用的是firewall作为防火墙,这里改为iptables防火墙步骤
查看>>
react 取消 eslint
查看>>
codeforces 960C Subsequence Counting
查看>>
【11】ajax请求后台接口数据与返回值处理js写法
查看>>
Python菜鸟之路:Jquery Ajax的使用
查看>>
LeetCode算法题-Maximum Depth of Binary Tree
查看>>
sha1withRSA算法
查看>>
Vim和操作系统剪贴板交互
查看>>
Cox 教学视频5
查看>>
JVM类加载(4)—加载器
查看>>