Leetcode——556. 下一个更大元素 III

题目链接:556. 下一个更大元素 III

(由于图片上传失败,不贴原题目了,有需要可以前往力扣查看)

本文给出该题的单调栈做法,同时绕过所有库函数,所有逻辑均自行实现。

本题的思路就是从右向左按位遍历,找到第一次下降时的下标,同时将数字对于下标填入栈中。这样,当找到要更改的下标时,开始循环,找到最后一个比要被替换的数字大的值,这就是单调栈。互换二者位置。我们假设第一次下降时下标为 idx , 被替换下标为 change, 由之前逻辑可以知道,[idx + 1, change - 1]的数字均大于idx的数字,[change + 1, size - 1]位置的数均小于idx的数字,最后我们只需要将[idx + 1, size - 1]位置的所有数字调换顺序就保证为下一个更大的数字,而不必使用排序。

而以上所需的交换swap,逆序reverse,还有离散化数字和重组数字,代码都给予实现。

class Solution {
public:int nextGreaterElement(int n) {int cnt = 0;    // 位数vector<int> nums;   // 离散化for(int i = n; i > 0; i /= 10){nums.push_back(i % 10);cnt++;}reverse(0, cnt - 1, nums);    // 更直观stack<int> stk;stk.push(cnt - 1);for(int i = cnt - 2; i >= 0; i--){if(nums[i] < nums[i + 1]){// 找到第一次下降的下标 iint change;        // 被更换位置while(!stk.empty() && nums[i] < nums[stk.top()]){change = stk.top();stk.pop();}swap(i, change, nums);reverse(i + 1, cnt - 1, nums);    // 注意下标long long ans = funcToll(nums);if(ans > INT_MAX){return -1;}else{return (int)ans;}}stk.push(i);    // 别忘在没找到前将下标入栈备用}return -1;}// 逆序void reverse(int i, int j, vector<int>& nums){if(i < 0 || j >= nums.size() || i >= j) { return; }while(i < j){swap(i++, j--, nums);}}// 交换void swap(int i, int j, vector<int>& nums){if(i < 0 || i >= nums.size() || j < 0 || j >= nums.size()) { return; }int t = nums[i];nums[i] = nums[j];nums[j] = t;}// 重组数字long long funcToll(vector<int>& nums){long long ans = 0;for(int x : nums){ans = ans * 10 + x;}return ans;}
};

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

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

相关文章

Idea打包可执行jar,MANIFEST.MF文件没有Main-Class属性:找不到或无法加载主类

背景&#xff1a;IDEA传统方法【Project structure】-->artifact---->build的模式&#xff0c;打包【Maven】项目&#xff0c;发现生成的可执行jar包&#xff0c;显示【找不到或无法加载主类】。但是用【Maven】的Assembly可以正常生成。期望用传统方法实现打jar包方法&a…

检索增强生成:RAG(Retrieval Augmented Generation)

什么是 RAG&#xff1f;为什么使用 RAG&#xff1f;LLM 微调 和 RAG&#xff1f;实战什么是 RAG&#xff1f; RAG 在论文《Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks》中被引入&#xff0c;原论文是这样描述的&#xff1a; 探索了一种 通用的 检索增…

Android 设置/修改系统NTP服务地址

Android 手机的 NTP 时间同步&#xff08;网络时间同步&#xff09;主要依赖网络&#xff0c;但系统时间来源还包括其他方式&#xff0c;整体时间校准机制是多种来源的结合。具体可分为以下几类&#xff1a; 1. 网络 NTP 同步&#xff08;最主要方式&#xff09; 这是 Androi…

Ubuntu22.04 安装vitis2023.2 卡在“Generating installed device list“.

关于这个问题&#xff0c;xilinx有官方说明&#xff0c;链接 原因&#xff1a;问题是 Ubuntu 20.04 缺少 libtinfo.so.5 库。 解决办法&#xff1a; sudo apt-get install libtinfo5

前端全栈修炼手册:从 Vue3 到工程化的进阶之路

本文将全方位覆盖前端开发的核心知识&#xff0c;从 Vue3 框架的基础语法到复杂的工程化实践&#xff0c;从包管理工具的使用到模块规范的深入理解&#xff0c;带你踏上从入门到精通的进阶之路。 Vue3 框架&#xff1a;新时代前端开发的基石 Vue3 核心语法探秘 Vue3 作为目前…

Jetpack Compose 常用控件

Jetpack Compose 常用控件一、基础展示控件&#xff1a;呈现静态内容二、交互控件&#xff1a;响应用户操作三、列表与网格控件&#xff1a;展示大量数据四、导航与标签控件&#xff1a;组织页面结构五、反馈控件&#xff1a;提示与加载状态六、布局控件&#xff1a;组织 UI 结…

Android适配最新SplashScreen方案:让启动页不再“翻车“

Android适配最新SplashScreen方案:让启动页不再"翻车" 各位开发者大佬们,最近是不是又被Android的SplashScreen适配搞得焦头烂额?别慌,今天咱们就来聊聊这个让人又爱又恨的启动页适配方案,保证让你笑出腹肌的同时,还能把技术要点牢牢掌握![6][7][9][10] 一、…

【自动驾驶】《Sparse4Dv3》代码学习笔记

这里时间比较有限&#xff0c;优先看Sparse4Dv3方法里面相对以前改动的地方。 0.参考 代码v1/v2/v3:https://github.com/HorizonRobotics/Sparse4D 跑起来&#xff1a;https://github.com/HorizonRobotics/Sparse4D/blob/v3.0/docs/quick_start.md 1.方法 &#xff08;1&a…

「ECG信号处理——(22)Pan-Tompkins Findpeak 阈值检测 差分阈值算法——三种R波检测算法对比分析」2025年8月8日

目录 1、引言 2、算法原理 &#xff08;1&#xff09;Pan-Tompkins 算法&#xff08;方法1&#xff09; &#xff08;2&#xff09;Findpeak 阈值检测算法&#xff08;方法2&#xff09; &#xff08;3&#xff09;差分阈值算法&#xff08;方法3&#xff09; 3、算法性能…

Qdrant Filtering:must / should / must_not 全解析(含 Python 实操)

在向量搜索中&#xff0c;过滤&#xff08;Filtering&#xff09; 是保证结果精准性和业务契合度的关键手段。Qdrant 的过滤机制不仅能在向量相似度检索的基础上叠加结构化条件&#xff0c;还提供了灵活的布尔逻辑组合&#xff0c;让我们可以像写数据库查询一样&#xff0c;精准…

五、RuoYi-Cloud-Plus 前端项目部署以及如何改后端请求地址。

1.前情描述 前面的文章我们介绍了RuoYi-Cloud-Plus的nocos的配置内容&#xff0c;已经启动其他服务要注意什么东西。 专栏内容在这&#xff0c;感兴趣可以看看。 https://blog.csdn.net/weixin_42868605/category_13023920.html 2.前端项目部署。 官网地址&#xff1a;plus…

工作量评估

工作量评估 API 工作量评估&#xff1a; 得分 入参个数 * 0.2 业务规则 * 0.5 改动的库表个数 * 0.3 得分&#xff08;1-2&#xff09;&#xff1a;简单API-5人天 得分&#xff08;3-8&#xff09;&#xff1a;中等API-8人天 得分&#xff08;8-15&#xff09;&#xff1a;复…

篮球运动(动态规划)

题目描述小明建造了一个篮球场&#xff0c;他请来了2行n列的人&#xff0c;想让他们进行比赛。每一个人都有一个能力值&#xff0c;第一行分别为h11&#xff0c;h12&#xff0c;…&#xff0c;h1n&#xff0c;第二行为h21&#xff0c;h22&#xff0c;…&#xff0c;h2n。现在小…

区块链与大数据分析技术深度解析

目录 区块链与大数据分析技术深度解析 1. 引言:当区块链遇见大数据 2. 区块链数据特性 2.1 数据结构差异 2.2 区块链数据层级 3. 数据获取技术 3.1 节点直连方案 3.2 链上数据湖架构 4. 数据分析关键技术 4.1 交易图谱分析 4.2 地址聚类算法 5. 链上分析应用场景 5.1 反洗钱(A…

网络基础——网络层级

OSI七层模型OSI七层模型名称功能协议应用层直接为用户应用程序&#xff08;如浏览器、邮件客户端&#xff09;提供网络服务接口。HTTP/HTTPS&#xff08;网页浏览&#xff09;FTP&#xff08;文件传输&#xff09;SMTP/POP3&#xff08;邮件&#xff09;DNS&#xff08;域名解析…

【Redis】hash哈希,List列表

目录 一. hash哈希 1.1.常用命令 1.1.1.HSET 1.1.2.HGET 1.1.3.HEXISTS 1.1.4.HDEL 1.1.5.HKEYS 1.1.6.HVALS 1.1.7.HGETALL 1.1.8.HMGET 1.1.9.HLEN 1.1.10.HSETNX 1.1.11.HINCRBY 1.1.12.HINCRBYFLOAT 1.2. 内部编码 1.3. 使用场景 1.4…

MySQL相关概念和易错知识点(4)(分组查询、连接查询、合并查询、子查询)

目录1.分组查询&#xff08;1&#xff09;聚合函数&#xff08;2&#xff09;group by子句&#xff08;3&#xff09;having2.连接查询&#xff08;1&#xff09;内连接&#xff08;笛卡尔积&#xff09;&#xff08;2&#xff09;外连接&#xff08;3&#xff09;内外连接的区…

【Python 高频 API 速学 ①】

一、为什么先学它们&#xff1f; 在真实代码里&#xff0c;90 % 的 bug 都源于「拿到的是 A 类型&#xff0c;却当成 B 类型用」。 把「不确定」变成「确定」——这就是类型转换三兄弟的核心价值。二、三兄弟速览函数一句话定位常见输入失败会怎样int(x)把 x 变成整数‘42’, 3…

FFmpeg 视频旋转信息处理:3.4 vs 7.0.2

1. 概述 FFmpeg 在处理视频旋转信息方面经历了重要的架构变化。本文档详细对比了 FFmpeg 3.4 和 7.0.2 在封装&#xff08;muxing&#xff09;和解封装&#xff08;demuxing&#xff09;视频旋转信息时的差异&#xff0c;并提供兼容性解决方案。文档内容由Claude Sonnet 4辅助撰…

《Resolving tissue complexity by multimodal spatial omics modeling with MISO》

概念多模态空间组学&#xff1a;简单来说&#xff0c;就是同时研究生物组织里的多种分子信息&#xff08;比如基因表达、蛋白质、代谢物、表观遗传标记等&#xff09;&#xff0c;而且这些信息还带有空间位置。MISO&#xff08;MultI-modal Spatial Omics&#xff09;是这篇论文…