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

示例 1 :

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

输入:num = "10200", k = 1
输出:"200"
解释:移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
示例 3 :

输入:num = "10", k = 2
输出:"0"
解释:从原数字移除所有的数字,剩余为空就是 0 。

提示:

1 <= k <= num.length <= 105
num 仅由若干位数字(0 - 9)组成
除了 0 本身之外,num 不含任何前导零

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/remove-k-digits
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

这是一道贪心题用单调栈来优化

思路:我们要找到一种策略使这是数字被删除k个数字后最小,就是要把所有大的并且靠前的元素删除。

class Solution {
public:
string removeKdigits(string num, int k) {
string stk;
string ans;
if(num.size() == k) return "0"; for(int i = 0; i < num.size(); i ++)
{
while(stk.size() && num[i] < stk.back() && k)
{
stk.pop_back();
k --;
}
stk.push_back(num[i]);
}
while (stk.size() && k > 0)
{
stk.pop_back();
k--;
}
for(auto x : stk)
{
if(ans.size() == 0 && x == '0') continue;
ans += x;
}
if(ans.size() == 0) ans += "0";
return ans;
}
};

几点细节要注意

1.可能只删除了m个元素栈中所有数都单调了,这时候我们需要在栈顶删除k - m个数

2.前导零如何处理

这里我们可以把string当成栈

前导零的处理

for(auto x : stk)
{
if(ans.size() == 0 && x == '0') continue;
ans += x;
}
if(ans.size() == 0) ans += "0";

Leetcode.402单调栈的更多相关文章

  1. LeetCode 84 | 单调栈解决最大矩形问题

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第52篇文章,我们一起来看LeetCode第84题,Largest Rectangle in Histogram( ...

  2. LeetCode || 双指针 / 单调栈

    11. Container With Most Water 题意:取两根求最大体积 思路:使用两个指针分别指向头和尾,然后考虑左右两根: 对于小的那根,如果选择了它,那么能够产生的最大体积一定是当前的 ...

  3. leetcode Maximal Rectangle 单调栈

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052721.html 题目链接:leetcode Maximal Rectangle 单调栈 ...

  4. leetcode Largest Rectangle in Histogram 单调栈

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052343.html 题目链接 leetcode Largest Rectangle in ...

  5. LeetCode Monotone Stack Summary 单调栈小结

    话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...

  6. LeetCode 84. Largest Rectangle in Histogram 单调栈应用

    LeetCode 84. Largest Rectangle in Histogram 单调栈应用 leetcode+ 循环数组,求右边第一个大的数字 求一个数组中右边第一个比他大的数(单调栈 Lee ...

  7. [LeetCode]739. 每日温度(单调栈)

    题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures ...

  8. [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找

    739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...

  9. leetcode 321. 拼接最大数(单调栈,分治,贪心)

    题目链接 https://leetcode-cn.com/problems/create-maximum-number/ 思路: 心都写碎了.... 也许就是不适合吧.... 你是个好人... cla ...

  10. 【leetcode】85. Maximal Rectangle(单调栈)

    Given a rows x cols binary matrix filled with 0's and 1's, find the largest rectangle containing onl ...

随机推荐

  1. PB从入坑到放弃(四)常用函数

    写在前面 这一期呢,来整理下PB 常用的函数,包括系统的和一些自己封装好的函数 一.字符串相关 1.1 Len函数 获取字符串长度 ① 语法 Len(string) ②参数 string-->s ...

  2. 基于GPT搭建私有知识库聊天机器人(六)仿chatGPT打字机效果

    文章链接: 基于GPT搭建私有知识库聊天机器人(一)实现原理 基于GPT搭建私有知识库聊天机器人(二)环境安装 基于GPT搭建私有知识库聊天机器人(三)向量数据训练 基于GPT搭建私有知识库聊天机器人 ...

  3. Solon v2.4.0 发布,Java 生态的新星燃起

    Solon 是什么开源项目? 一个,Java 新的生态型应用开发框架.它从零开始构建,有自己的标准规范与开放生态(历时五年,已有全球第二级别的生态规模).与其他框架相比,它解决了两个重要的痛点:启动慢 ...

  4. 笔记:KMP的复习

    Record 一个重要的字符串算法,这是第三次复习. 通过总结我认为之所以某个算法总是忘记,是因为大脑始终没有认可这种算法的逻辑(也就是脑回路). 本篇主要讲解从KMP的应用场景,再到算法知识,以及例 ...

  5. NOI2023 题解

    打的太 shaber 了,于是补补题. D1T1 扫描线. 首先我们可以容斥一下,答案为被一种操作覆盖到的减去被两种操作覆盖到的加上被三种操作覆盖到的. 首先考虑只被一种操作覆盖到的,这很简单,直接上 ...

  6. 七 APPIUM Android 定位方式(转)

    1.定位元素应用元素 1.1通过id定位元素 Android里面定位的id一般为resrouce-id: 代码可以这样写: WebElement element = driver.findElemen ...

  7. pc 移动端 双端切换

    实现一个项目匹配多个端,使用vue.config自带的page 实现多个页面切换.官网介绍:https://cli.vuejs.org/zh/config/#pages 在创建的vue项目中找到 vu ...

  8. Linux系统远程拷贝命令:scp

    做个记录,首先两台机器间要互通. 1. 将本地服务器的文件夹/文件拷贝到远程服务器上 语法: scp -r -P port local_folder/remote_file remote_userna ...

  9. c# .NET 高级编程 高并发必备技巧(二) - 分布式锁

    上一篇文章简单的介绍了单机的情况下如何进行加锁,防止高并发带来的问题. 然而现实中,一般会高并发的应用,很少会单机部署.当用户量达到一定的程度,分布式.集群部署是必然的选择.在分布式部署的情况下,之前 ...

  10. DHorse v1.3.2 发布,基于 k8s 的发布平台

    版本说明 新增特性 构建版本.部署应用时的线程池可配置化: 优化特性 构建版本跳过单元测试: 解决问题 解决Vue应用详情页面报错的问题: 解决Linux环境下脚本运行失败的问题: 解决下载Maven ...