Leetcode.402单调栈
给你一个以字符串表示的非负整数 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单调栈的更多相关文章
- LeetCode 84 | 单调栈解决最大矩形问题
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是LeetCode专题第52篇文章,我们一起来看LeetCode第84题,Largest Rectangle in Histogram( ...
- LeetCode || 双指针 / 单调栈
11. Container With Most Water 题意:取两根求最大体积 思路:使用两个指针分别指向头和尾,然后考虑左右两根: 对于小的那根,如果选择了它,那么能够产生的最大体积一定是当前的 ...
- leetcode Maximal Rectangle 单调栈
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052721.html 题目链接:leetcode Maximal Rectangle 单调栈 ...
- leetcode Largest Rectangle in Histogram 单调栈
作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4052343.html 题目链接 leetcode Largest Rectangle in ...
- LeetCode Monotone Stack Summary 单调栈小结
话说博主在写Max Chunks To Make Sorted II这篇帖子的解法四时,写到使用单调栈Monotone Stack的解法时,突然脑中触电一般,想起了之前曾经在此贴LeetCode Al ...
- LeetCode 84. Largest Rectangle in Histogram 单调栈应用
LeetCode 84. Largest Rectangle in Histogram 单调栈应用 leetcode+ 循环数组,求右边第一个大的数字 求一个数组中右边第一个比他大的数(单调栈 Lee ...
- [LeetCode]739. 每日温度(单调栈)
题目 根据每日 气温 列表,请重新生成一个列表,对应位置的输入是你需要再等待多久温度才会升高超过该日的天数.如果之后都不会升高,请在该位置用 0 来代替. 例如,给定一个列表 temperatures ...
- [每日一题2020.06.13]leetcode #739 #15 单调栈 双指针查找
739 每日温度 ( 单调栈 ) 题目 : https://leetcode-cn.com/problems/daily-temperatures/ 题意 : 找到数组每一个元素之后第一个大于它的元素 ...
- leetcode 321. 拼接最大数(单调栈,分治,贪心)
题目链接 https://leetcode-cn.com/problems/create-maximum-number/ 思路: 心都写碎了.... 也许就是不适合吧.... 你是个好人... cla ...
- 【leetcode】85. Maximal Rectangle(单调栈)
Given a rows x cols binary matrix filled with 0's and 1's, find the largest rectangle containing onl ...
随机推荐
- snmptt解析中文trap消息
项目中使用了中国电信系统集成公司的虚拟化平台,为通过zabbix监控,接收HyperCenter发送的告警,需要将trap消息中的汉语编码转译.网络上snmptt资料不多,官网文档也不甚友好,通过参考 ...
- Cilium 系列-2-Cilium 快速安装
系列文章 Cilium 系列文章 前言 在本章中,我们将直接将 Cilium 安装到 Kubernetes 集群中. 在实验中,我们用到的组件及版本为: Cilium 1.13.4 K3s v1.26 ...
- jQuery入口函数测试
<script src="js/jquery-1.12.4.js"></script><script> window.onload = func ...
- Python操纵数据库:peewee
模块名:peewee 安装方法: pip install peewee 官方教程:http://docs.peewee-orm.com/en/latest/
- APubPlat 一款Devops自动化部署、持续集成、堡垒机开源项目、友好的Web Terminal
嗨.很高心你能进入这里,我是zane, 在这里给你介绍一款完整的Devops自动化部署工具 APubPlat - 一款完整的Devops自动化部署.持续集成.堡垒机.并且友好的Web Termina ...
- BTC中的数据结构
BTC中的数据结构 普通指针 普通指针存储的是某个结构体在内存中的地址(假如P是指向一结构体的指针,那么P里面存放的就是该结构体在内存中的起始位置) Hash pointer(哈希指针) 对于如下的节 ...
- JS语言里常见的随机函数示例,实验结果分布规律分析
在JavaScript语言里有个 Math.random() 随机函数,用于生成指定范围内的随机数. Math.random()函数 根据官方的定义: Math.random() 函数返回一个浮点数, ...
- 如何破解wifi密码?
前期准备: kali 系统 外置无线网卡 破解过程: 首先,需要登录kali系统,可以是虚拟机. 在虚拟机中设置点击 虚拟机-可移动设备-无线网卡的名称,将无线网卡绑定到kali虚拟机上. 在kali ...
- Ansible快速复习
本文章是上一篇ansible自动化运维的快速复习以及项目上用到的一些命令,针对长时间未使用ansible,导致命令忘记的同学,帮助快速回忆.详细内容还是看上一章'ansible自动化运维'. 查看版本 ...
- ❤️ GitHub Copilot 读心术揭秘,Copilot 逆向工程笔记
总览 你是否好奇 GitHub Copilot 如何知道你想写的内容?有时候它聪明得甚至好像读过你项目里其他文件一样,不要怀疑,它确实读过.这篇文章记录了我阅读一个对 Copilot 的逆向工程的笔记 ...