自学内容网 自学内容网

day47|单调栈739. 每日温度 496.下一个更大元素 I503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形


前言

在这里插入图片描述

单调栈: 方向从栈顶到栈底
如果递增,求右边第一个比它的数值
如果递减,求右边第一个比它的数值

739. 每日温度

在这里插入图片描述

思路

只需要遍历一遍
单调栈的作用:存放之前遍历过的元素 ,这里使用单调增
在使用单调栈的时候首先要明确如下几点:

  1. 单调栈里存放的元素是什么?
    单调栈里只需要存放元素的下标i就可以了,如果需要使用对应的元素,直接T[i]就可以获取。

  2. 单调栈里元素是递增呢? 还是递减呢?
    注意以下讲解中,顺序的描述为 从栈头到栈底的顺序;递增;

  3. 操作过程

  • 当前遍历的元素T[i]小于栈顶元素T[st.top()]的情况:压栈
  • 当前遍历的元素T[i]等于栈顶元素T[st.top()]的情况:根据题目,压栈
  • 当前遍历的元素T[i]大于栈顶元素T[st.top()]的情况:while语句,如果满足大于的条件,那么计算出st.top对应的result中的结果:i-st.top();知道T【i】小于T【top】的值,压栈
    在这里插入图片描述

方法一

注意stack要判断不为空

class Solution(object):
    def dailyTemperatures(self, temperatures):
        """
        :type temperatures: List[int]
        :rtype: List[int]
        """
        result = [0]*len(temperatures)
        stack = [0]#压入第一个元素
        for i in range(1,len(temperatures)):
            if stack and temperatures[i] <= temperatures[stack[-1]]:#如果当前元素小于栈顶元素
                stack.append(i)#压栈
            else:
                while stack and temperatures[i] > temperatures[stack[-1]]:
                    result[stack[-1]] = i - stack[-1]
                    stack.pop()
                stack.append(i)
        return result

496.下一个更大元素 I

在这里插入图片描述

思路

题目有点绕,但是是一样的,针对nums2进行处理,如果找到了栈顶元素的第一个大于它的值,看看这个栈顶元素是否在nums1里面,如果在的话就给出结果,不在pop出来就行
评论区的思路:一样的,但是更加简单,先把上一题对应的res求出来之后,对着nums1来找结果就行

方法一

我这里有点不一样,stack里面没放坐标了,直接放的元素,

class Solution(object):
    def nextGreaterElement(self, nums1, nums2):
        """
        :type nums1: List[int]
        :type nums2: List[int]
        :rtype: List[int]
        """
        res = [-1] * len(nums1)#存储结果矩阵
        stack = [nums2[0]]#存放nums2中的值
        for i in range(1,len(nums2)):
            if nums2[i] <= stack[-1]:
                stack.append(nums2[i])
            else:
                while stack and nums2[i] > stack[-1]:
                    
                    if stack[-1] in nums1:
                        index_nums1 = nums1.index(stack[-1])
                        res[index_nums1] = nums2[i]
                    stack.pop()
                stack.append(nums2[i])
        return res
                

503.下一个更大元素II

在这里插入图片描述

思路

处理环形数组✨💕🩷🩷🩷🩷🩷
思路一: 拼一下&


原文地址:https://blog.csdn.net/Calliops/article/details/143050541

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!