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、
思路:单调栈
- 栈里存储,未找到下一个更大元素的,元素【下标】
- 当栈为空,当前元素【下标】入栈
- 每遍历到一个当前元素用当前元素,用当前元素挨个比较栈顶到栈底的元素;如果当前元素比栈里的元素大,表示找到了栈里存的这个下标对应的结果,存到res里的相应位置;否则将下标入栈
- 注意,栈里的下标对应元素一定是,从栈底到栈顶单调递减,否则栈顶就是栈底的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每日温度的主要内容,如果未能解决你的问题,请参考以下文章