LeetCode402 移掉 K 位数字

题目描述:给你一个以字符串表示的非负整数 num 和一个整数 k ,移除这个数中的 k 位数字,使得剩下的数字最小。请你以字符串形式返回这个最小的数字。

事例:
输入:num = “1432219”, k = 3
输出:“1219”
解释:移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219 。

分析:
当字符串的第i位所对应数字大于第i+1位所对应数字,我们删除第i位的数字保留第i+1的数字。利用堆来不断存储获取的数字,这样就可以确保堆从堆底到堆顶一直维持一个递增的顺序,然后我们将新获取的第i位所对应的数字和堆顶数字比较,确保堆顶是较小的数字。只到删除了k个数字,然后循环将剩下的所有数字进入队列。之后再创建一个动态字符串,从堆底获取每个字符串传入动态字符串中。

知识点:
1:创建值为字符的堆

Deque<Character> deque = new LinkedList<Character>();

2:获取字符串所对应的字符

char digit = num.charAt(i);

3:判断堆是否为空

deque.isEmpty()

4:向堆中添加或删除元素

deque.offerLast(digit);
deque.pollLast();
deque.pollFirst();
deque.peekLast()
获取堆顶元素,但是不删除

5:创建一个动态字符串

 StringBuilder ret = new StringBuilder();

向字符串中添加元素

ret.append(digit);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值