739. 每日温度
python
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
n = len(temperatures)
ans = [0] * n
st = []
for i in range(n - 1, -1, -1):
t = temperatures[i]
while st and t >= temperatures[st[-1]]:
st.pop()
if st:
ans[i] = st[-1] - i
st.append(i)
return ans
496.下一个更大元素 I
python
class Solution:
def nextGreaterElement(self, nums1: List[int], nums2: List[int]) -> List[int]:
idx = {x: i for i, x in enumerate(nums1)}
ans = [-1] * len(nums1)
st = []
for x in reversed(nums2):
while st and x >= st[-1]:
# 由于 x 的出现,栈顶元素永远不会是左边元素的「下一个更大元素」
st.pop()
if st and x in idx: # x 在 nums1 中
ans[idx[x]] = st[-1] # 记录答案
st.append(x)
return ans
503.下一个更大元素II
python
class Solution:
def nextGreaterElements(self, nums: List[int]) -> List[int]:
n = len(nums)
ans = [-1] * n
st = []
for i in range(n * 2 - 1, -1, -1):
x = nums[i % n]
while st and x >= st[-1]:
# 由于 x 的出现,栈顶元素永远不会是左边元素的「下一个更大元素」
st.pop()
if st and i < n:
ans[i] = st[-1]
st.append(x)
return ans