当前位置: 首页 > news >正文

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.lryc.cn/news/615222.html

相关文章:

  • 八、《DaaS(设备即服务):企业轻资产化新路径》--从97.4%首期投入削减到AI算力高效迭代的范式革命
  • Spring 框架中提供Aware接口,实现感知容器对象
  • spring.config.import 不存在
  • “高大上“的SpringCloud?(微服务体系入门)
  • ELK常见的问题
  • 智能机票助手-接入Ollama本地模型-Spring-AI-Alibaba
  • 在ubuntu服务器下安装cuda和cudnn(笔记)
  • 揭秘MyBatis核心类MappedStatement
  • 多模态RAG赛题实战--Datawhale AI夏令营
  • 如何分析需求的可行性
  • 生产环境某业务服务JVM调优总结
  • 避免在微信小程序中频繁使用setData方法
  • 扩散LLM推理新范式:打破生成长度限制,实现动态自适应调节
  • 机器学习——09 聚类算法
  • BGP 协议笔记
  • 使用qemu运行与GDB调试内核
  • 微软推出革命性AI安全工具Project IRE,重塑网络安全防御新范式
  • 用天气预测理解分类算法-从出门看天气到逻辑回归
  • Kubernetes(K8s)不同行业的典型应用场景及价值分析 原创
  • windows、linux应急响应入侵排查
  • Qdrant Filtering:must / should / must_not 全解析(含 Python 实操)
  • 【2025】Datawhale AI夏令营-多模态RAG-Task1、Task2笔记-任务理解与Baseline代码解读
  • 金融通用智能体(Financial General Agent, FGA)的端到端解决方案
  • 机器翻译中的语言学基础详解(包括包括语法、句法和语义学等)
  • C语言:构造类型
  • TDengine IDMP 产品基本概念
  • 使用 Visual Studio 2022 编译 PortAudio 项目
  • occworld(1):论文解读
  • Ghost备份分区设置分包大小方法
  • 任务发布悬赏查询管理地推抖音快手微信任务赚佣金网站源码功能详解二开