leetcode 402.移掉k位数字

暴力的话我只能优化到这里了,也就是只能过31个样例,思路就是对于每一位字符,如果当前的字符小于下一个字符,那么就加进去结果,否则就是需要删除的字符,然后次数++。

class Solution {
public:string removeKdigits(string num, int k) {if(num=="0")return "0";if(num.size()==k)return "0";string s;string buf=num;sort(buf.begin(),buf.end());if(buf==num){buf.resize(num.size()-k);return buf;}else{int count=0;int index=0;for(int i=0;i<num.size()-1;i++){if(num[i]<num[i+1])s+=num[i];else{count++;}if(count==k){index=i+1;break;}}s+=num.substr(index);int index2=0;while(s[index2]=='0'&&s.size()>1){index2++;}if(index2==s.size())return "0";elsereturn s.substr(index2);}}
};

其实上面的思路已经很接近正确的贪心思路了。其实这个思路暴力下去是对的,但是对于前导0的判断并不是很会,所以在判断前导0的时候会把不是前导0的0也去掉了,所以这个做法是有待优化的做法,并不是思路不对。

接下来就是对于正解的解读了:贪心+单调栈。

我们发现,可以用一个栈进行存储数字,然后在栈顶判断下一个元素是否可以加进来,如果比当前的元素大,那么就入栈,否则就出栈,也就是我们说的删除元素;这个循环停止有三个条件:

1.这个栈空的时候;

2.当我们的删除次数用完的时候;

3.当前的元素对比下一个元素并不是大于关系。

并列条件,所以有一条不符合就直接退出。

这样的话就会有两个问题:

1.当前的元素对比下一个元素并不是大于关系就退出了之后,我们的删除次数可能没有用完,所以在外面继续出栈,直到删除次数用完。

2.我们并没有处理前导0。所以这就需要我们额外处理一个前导0.这也是作者需要学习的地方。

处理的时候我们需要有一个flag标志变量判断当前是不是连续的0,如果判断当前并不是连续的0中的其中一个,我们就把这个标志变成false。这样就不会出现删除除前导0以外的0了。

class Solution {
public:string removeKdigits(string num, int k) {vector<char>stack;for(int i=0;i<num.size();i++){while(!stack.empty()&&stack.back()>num[i]&&k>0){stack.pop_back();//这个时候也就是说栈不空,并且当前元素大于下一个元素,且删除次数没有用完k--;}stack.push_back(num[i]);//在不满足上面的循环条件的时候就进栈}for(;k>0;k--)stack.pop_back();//删除次数可能没有用完就退出了,所以需要判断一下,没有删完就继续删string res;bool flag=true;for(int i=0;i<stack.size();i++){//前导0的判断if(flag&&stack[i]=='0')continue;else{flag=false;res+=stack[i];}}return res==""?"0":res;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【运维】MacOS Wifi热点设置

目录 打开热点 配置共享网段 打开热点 打开macOS设置&#xff0c;进入通用->共享 点击如下图标进行配置&#xff0c; 会进入如下界面&#xff08;⚠️目前是打开共享状态&#xff0c;无法修改配置&#xff0c;只有在未打开状态才能进入配置&#xff09; 配置完成后&#x…

2024.3.23

具体是哪些参数 每个点是如何投票的 删除那里不懂 是先给了&#xff0c;再重新分组&#xff0c;具体怎么再重新分组 聚的簇 真实的标签 为什么没有PI 加上其他的 基因调控网络

【前端寻宝之路】学习和总结有无序列表的实现和样式修改

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-WuZk6y8cqVpDsE8W {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

深度学习之本地部署大模型ChatGLM3-6B【大模型】【报错】

文章目录 0.前言1.模型下载2.配置环境2.1 下载项目文件2.2 配置环境 3.开始推理4.总结 0.前言 本博客将介绍ChatGLM3-6B大模型在Ubuntu上的本地部署教程 1.模型下载 由于毛毛张的服务器服务无法科学上网&#xff0c;所以模型的相关文件必须现在本地下载好&#xff0c;再上传到…

Zookeeper详解(zk)

文章目录 Zookeeper 概念ZooKeeper的应用场景使用场景zk的原理ZooKeeper、Nacos、Eureka 和 Consul区别Zookeeper的数据结构zk集群脑裂如何解决ZAB 协议假如注册中心挂了&#xff0c;消费者还能调⽤服务吗&#xff0c;用什么调用的dubbo注册中心为什么选择 Zookeeper关于zookee…

【C语言】数据在内存中的存储(包含大小端字节序问题)~

一、前言 我们在刚开始学习C语言的时候&#xff0c;就接触到了很多数据的不同类型。我们也知道&#xff0c;数据是存储在一块内存空间的&#xff0c;且我们只知道数据的类型决定着&#xff0c;该数据在内存中所占内存空间的大小&#xff0c;且超过一个字节的数据在内存中存储的…

HTTP --- 上

目录 1. HTTP协议 2. 认识URL 2.1. URL中的四个主要字段 2.2. URL Encode && URL Decode 3. HTTP 协议格式 3.1. 快速构建 HTTP 请求和响应的报文格式 3.1.1. HTTP 请求格式 3.1.2. HTTP 响应格式 3.1.3. 关于 HTTP 请求 && 响应的宏观理解 3.2. 实现…

SOPHON算能服务器SDK环境配置和相关库安装

目录 1 SDK大包下载 2 安装libsophon 2.1 安装依赖 1.2 安装libsophon 2 安装 sophon-mw 参考文献&#xff1a; 1 SDK大包下载 首先需要根据之前的博客&#xff0c;下载SDK大包&#xff1a;SOPHON算能科技新版SDK环境配置以及C demo使用过程_sophon sdk yolo-CSDN博客 …

已解决redis.clients.jedis.exceptions.JedisRedirectionException异常的正确解决方法,亲测有效!!!

已解决redis.clients.jedis.exceptions.JedisRedirectionException异常的正确解决方法&#xff0c;亲测有效&#xff01;&#xff01;&#xff01; 目录 问题分析 报错原因 解决方法 总结 博主v&#xff1a;XiaoMing_Java 问题分析 在使用Redis集群环境时开发者可能会遇到…

计算机三级——网络技术(综合题第四题)

综合题第四题考点总结&#xff1a; 1.DSN域名解析 2.ICMP控制报文协议 3.TCP三次握手 4.HTTP超文本传输协议 5.FTP文件传输协议 DNS域名解析 域名系统&#xff08;英文&#xff1a;Domain Name system&#xff0c;缩写&#xff1a;DNS&#xff09;是互联网的一项服务。它作为将…

数据中台:如何构建企业核心竞争力_光点科技

在当今信息化快速发展的商业环境下&#xff0c;“数据中台”已经成为构建企业核心竞争力的关键步骤。数据中台不仅是数据集成与管理的平台&#xff0c;更是企业智能化转型的加速器。本文将深入探讨数据中台的定义、特点、构建方法及其在企业中的作用。 数据中台的定义 数据中台…

8-深度学习

声明 本文章基于哔哩哔哩付费课程《小白也能听懂的人工智能原理》。仅供学习记录、分享&#xff0c;严禁他用&#xff01;&#xff01;如有侵权&#xff0c;请联系删除 目录 一、知识引入 &#xff08;一&#xff09;深度学习 &#xff08;二&#xff09;Tensorflo…

嵌入式Linux内核启动过程详解(第二阶段:C语言部分)

目录 概述 1 启动内核第二阶段流程图 2 嵌入式Linux内核启动分析&#xff08;C语言部分&#xff09; 2.1 start_kernel()函数 2.2 rest_init()函数 2.3 kernel_init()函数 2.4 kernel_init_freeable()函数 概述 本文主要介绍linux内核启动&#xff08;内核版本&#xff…

FPGA学习_时序分析

文章目录 前言一、组合逻辑与时序逻辑二、建立时间和保持时间三、建立时间和保持时间 前言 心中有电路&#xff0c;下笔自然神&#xff01;&#xff01;&#xff01; 一、组合逻辑与时序逻辑 组合逻辑&#xff1a;没有时钟控制的数字电路&#xff0c;代码里的判断逻辑都是组…

先进电机技术 —— 何为轴电压?

一、特定场景举例 长线驱动指的是在电动机与变频器之间存在较长的连接电缆&#xff0c;尤其是在大型工业应用中&#xff0c;电机可能远离变频器几十米甚至上百米。这种情况下&#xff0c;变频器通过长线向电动机传输功率时&#xff0c;可能会加剧电机轴电压和轴电流的产生&…

《明日边缘2》AI制作电影宣传片

《明日边缘2》AI制作电影宣传片 In the dawn of a new war, the cycle of death and rebirth begins. 在新战争的曙光中&#xff0c;生死轮回的循环悄然开启。 Each repetition brings a new horror, but also a chance for redemption. 每一次循环都带来新的恐怖&#xff0c;却…

第六十二回 宋江兵打大名城 关胜议取梁山泊-飞桨ONNX推理部署初探

石秀和卢俊义在城内走投无路&#xff0c;又被抓住。梁中书把他两个人押入死牢。蔡福把他俩关在一处&#xff0c;好酒好菜照顾着&#xff0c;没让两人吃苦。 第二天就接到城外梁山泊的帖子&#xff0c;说大军已经来到&#xff0c;要替天行道&#xff0c;让他放人&#xff0c;并…

SpringBoot自定义starter开发:使用属性配置设置定时器参数

&#x1f648;作者简介&#xff1a;练习时长两年半的Java up主 &#x1f649;个人主页&#xff1a;程序员老茶 &#x1f64a; ps:点赞&#x1f44d;是免费的&#xff0c;却可以让写博客的作者开心好久好久&#x1f60e; &#x1f4da;系列专栏&#xff1a;Java全栈&#xff0c;…

leetcode84--柱形图的最大面积

1. 题意 给定一个数组&#xff0c;求以数组中某一元素为高形成的连续矩形的最大面积。 转换成数学的描述就是 给定一个数组&#xff0c;求 a [ i : j ] m a x ( m i n { a [ i ] , a [ i 1 ] ⋯ , a [ j ] } ( j − i 1 ) ) a[i:j]\\ max(min\{a[i],a[i1]\cdots,a[j]\} …

jupyter notebook使用教程

首先是打开jupyter notebook 下载安装好之后&#xff0c;直接在命令行中输入‘jupyter notebook’即可跳转到对应页面 还可以进入想要打开的文件夹&#xff0c;然后再文件夹中打开中断&#xff0c;执行‘jupyter notebook’命令&#xff0c;就能够打开对应文件界面的jupyter …