leetcode中等496503下一个更大元素12 || 739每日温度

Posted qq_40707462

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode中等496503下一个更大元素12 || 739每日温度相关的知识,希望对你有一定的参考价值。

496、

在这里插入图片描述
思路:【不重复】【子集】
在nums2里找到每个元素的下一个更大值,存储到hash表里,然后去nums1里查表
hash【当前元素】=下一个大值

单调栈:每遍历nums2一个元素,去和栈里比较,栈里存储的都是单调递减的,如果本元素比栈里元素大,即找到栈里元素的下一个大值,出栈,记录hash

class Solution:
    def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
        stack=[]
        hash={}
        for n in nums2:
            while stack and stack[-1]<n:
                hash[stack.pop()]=n
            stack.append(n)
        return [hash.get(x, -1) for x in nums1]

503、

在这里插入图片描述
思路:单调栈

  1. 栈里存储,未找到下一个更大元素的,元素【下标】
  2. 当栈为空,当前元素【下标】入栈
  3. 每遍历到一个当前元素用当前元素,用当前元素挨个比较栈顶到栈底的元素;如果当前元素比栈里的元素大,表示找到了栈里存的这个下标对应的结果,存到res里的相应位置;否则将下标入栈
  4. 注意,栈里的下标对应元素一定是,从栈底到栈顶单调递减,否则栈顶就是栈底的res了

和1相比:循环两遍;不需要hash;栈里存【下标】

class Solution:
    def nextGreaterElements(self, nums: List[int]) -> List[int]:
        l = len(nums)
        stack = []
        res = [-1] * l
        for i in range(l * 2):
            while stack and nums[i % l] > nums[stack[-1]]:
                res[stack.pop()] = nums[i % l]

            stack.append(i % l)
        return res

739、

在这里插入图片描述
思路:
stack存入【下标】,如果当前下标,比栈里存的下标,的温度高,则把res对应地方,赋值为两个下标之差,即天数之差

class Solution:
    def dailyTemperatures(self, T: List[int]) -> List[int]:
        res = [0] * len(T)
        stack = []
        for i in range(len(T)):
            while stack and T[stack[-1]]<T[i]:
                temp=stack.pop()
                res[temp]=i-temp#i时当前天,差是等待天数
            stack.append(i)
        return(res)

以上是关于leetcode中等496503下一个更大元素12 || 739每日温度的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 556.下一个更大元素III

LeetCode#556-下一个更大元素-arraycopy用法

leetcode 556. 下一个更大元素 III

[Leetcode]下一个更大元素II

[Leetcode]下一个更大元素II

LeetCode 0503. 下一个更大元素 II