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

leetcode503. 下一个更大元素 II 单调栈

思路:

与之前 739、1475 单调栈的问题如出一辙,唯一不同的地方就是对于遍历完之后。栈中元素的处理,之前的栈中元素因无法找到符合条件的值,直接加入vector中。而这里需要再重头遍历一下数组,找是否有符合条件的,如果仍然找不到的话,才会把它赋值然后加入vector中。

代码:

class Solution {
public:vector<int> nextGreaterElements(vector<int>& nums) {int n = nums.size();vector<int> ans(n);stack<int> st;for (int i = 0; i < n; i++) {int t = nums[i];// 出栈并计算while (!st.empty() && t > nums[st.top()]) {int x = st.top();ans[x] = t;st.pop();}// 入栈while (st.empty() || (t <= nums[st.top()] && i != st.top())) {st.push(i);}}// 处理遍历完之后,栈中剩余的元素。while (!st.empty()) {int x = st.top();// 从头遍历数组看是否有符合要求的值。int i = 0;for (i = 0; i < n; i++) {if (nums[i] > nums[x]) {ans[x] = nums[i];break;}}if (i == n) ans[x] = -1;st.pop();}return ans;}
};

注意点:

for循环中的入栈出栈顺序非常重要!!!

出栈放在最后,则新元素无法入栈。

运行结果:

http://www.lryc.cn/news/139467.html

相关文章:

  • Oracle中列的维护
  • 后端项目开发:分页功能的实现(Mybatis+pagehelper)
  • SpringBoot集成Drools
  • React创建组件的三种方式及其区别是什么?
  • W6100-EVB-PICO进行UDP组播数据回环测试(九)
  • Qt 阴影边框
  • 前端面试:【性能优化】页面加载性能、渲染性能、资源优化
  • 从按下电源键到进入系统,CPU在干什么?
  • TypeScript初体验
  • 基于 Alpine 环境源码构建 alibaba-tengine(阿里巴巴)的 Docker 镜像
  • 政府网站定期巡检:构建高效、安全与透明的数字政务
  • C++信息学奥赛1138:将字符串中的小写字母转换成大写字母
  • leetcode1475. 商品折扣后的最终价格 【单调栈】
  • macOS M1使用TensorFlow GPU加速
  • GNU-gcc编译选项-1
  • 【DEVOPS】Jenkins使用问题 - 控制台输出乱码
  • logback-spring.xml
  • 华为OD机试之报文重排序【Java源码】
  • 回归预测 | MATLAB实现BES-ELM秃鹰搜索优化算法优化极限学习机多输入单输出回归预测(多指标,多图)
  • DPU在东数西算背景下如何赋能下一代算力基础设施 中科驭数在未来网络发展大会论道
  • 2021年12月 C/C++(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • ArcGIS Serve Windows下用户密码变更导致Server服务无法启动问题
  • React 面试题集锦
  • xargs命令解决“Argument list too long”
  • R语言中<- 的含义
  • 知识图谱Neo4j安装到实践全过程
  • 贪心算法:简单而高效的优化策略
  • 一生一芯6——ubuntu rpm软件安装
  • Python练习 函数取列表最小数
  • 五种重要的 AI 编程语言