代码随想录算法训练营第50天 | 单调栈01

代码随想录算法训练营第天 |

739.每日温度
https://leetcode.cn/problems/daily-temperatures/description/
代码随想录
https://programmercarl.com/0739.每日温度.html#其他语言版本
496.下一个更大元素 I
https://leetcode.cn/problems/next-greater-element-i/description/
代码随想录
https://programmercarl.com/0496.下一个更大元素I.html#算法公开课
503.下一个更大元素II
https://leetcode.cn/problems/next-greater-element-ii/description/
代码随想录
https://programmercarl.com/0503.下一个更大元素II.html#算法公开课

739.每日温度

  • 要寻找任一个元素的右边或者左边第一个比自己大或者小的元素的位置,此时我们就要想到可以用单调栈了
  • 用一个栈来记录我们遍历过的元素
  • 递增循序:栈头栈底
  • 具体操作:
    -保证新增栈元素是栈内最小的值;
    -遇到比栈顶值大的值 弹出该值 该值找到了最近的比其大的值 增加至结果;
点击查看代码
class Solution:
    def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
        st = [0]
        res = [0]*len(temperatures)
        for i in range(len(temperatures)):
            while len(st)>0 and temperatures[i]>temperatures[st[-1]]:
                res[st[-1]] = i-st[-1]
                st.pop()
            st.append(i)
        return res

496.下一个更大元素 I

  • 更改元素主体 本质没有变
  • 只需要在nums2中遍历出结果 然后按照nums1放置结果
点击查看代码
class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        res = [-1]*len(nums1)
        st = [0]
        for i in range(1,len(nums2)):
            while len(st)>0 and nums2[i]>nums2[st[-1]]:
                if nums2[st[-1]] in nums1:
                    index = nums1.index(nums2[st[-1]])
                    res[index] = nums2[i]
                st.pop()
            st.append(i)
        return res

503.下一个更大元素II

  • 只需要解决循环的问题
  • 通过遍历数组两遍即可解决 i = i%n
点击查看代码
class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        res = [-1]*len(nums)
        st = [0]
        n = len(nums)
        for i in range(1,2*len(nums)):
            while len(st)>0 and nums[i%n]>nums[st[-1]]:
                res[st[-1]] = nums[i%n]
                st.pop()
            st.append(i%n)
        return res
posted @   哆啦**  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示