2025/10/16
思路:先遍历一遍,把波峰波谷的值和位置记下来,往上升的全都是1, 往下降的每一段(山谷),一点点往谷底夹击:先判断波峰如果左大,则找下一个波峰,一直到没有;然后左波峰往下走一个位置,继续判断,如果在最近的波峰右大,则右波峰往左走一个位置。
答案:思路正确,但太麻烦
推荐答案:单调栈,但我看都没看懂,自然不可能想到
2025/10/19
class Solution:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]:
if len(temperatures) == 1: return [0]
results = [0] * len(temperatures)
mono_stack = stack()
mono_stack.push([temperatures[0], 0])
for t, idx in enumerate(temperatures):
if t > stack.top():
pop_times = 0
while t > stack.top():
_, i = stack.pop()
pop_times += 1
results[i] = pop_times
else:
stack.push(t, idx)
return results