力扣——503(下一个更大的元素II)——单调栈的解法

一、单调栈的概念

单调栈是指,栈里面的元素从栈顶到栈底的排列顺序都是单调的(要么递减,要么递增)

二、原题展示

在这里插入图片描述
利用单调栈的解法代码(看官方解法二仿写):

在这里插入图片描述

利用单调栈的解法代码(官方解法二仿写):
 这里代码的单调栈sta起到的作用是——存放nums的下标.
 然后比较栈顶下标对应的元素与正常遍历nums[i%len]的大小,

  • 如果nums[i%len]较小,那么将其下标继续放入栈,使栈下标对应的元素是递减排列。
  • 如果栈顶下标对应的元素较小,那么就找到了题目要的元素nums[i%len],便放入ret()中,然后继续pop(),栈的下一个元素与这个比较。直到不满足while的条件

值得注意的是,nums[i%len],这个对下标取余的想法,我觉得很巧妙
其余的没什么好说的,理解之后其实很简单,我之前是用两遍循环暴力求解,没什么水平
在这里插入图片描述看看这个时间差别,单调栈是个好东西。

如果有想交流,欢迎在评论里与我交流。

这是这个题目的连接:
https://leetcode-cn.com/problems/next-greater-element-ii/solution/xia-yi-ge-geng-da-yuan-su-ii-by-leetcode-bwam/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值