使用单调栈,寻找第一个比当前元素大的元素。使用单调递减栈,然后当当前元素比栈顶元素大,栈顶pop,并计算位置。这样可以把前面比当前元素小的元素都计算出来,如果当前元素小于栈顶,那说明它的结果(右侧第一个比自己大的元素)还在后面,把它先放到栈中。由于有一些元素找不到比它大的元素所以应该初始化时就置为0,这样如果可以找到结果就修改结果值,如果找不到就直接为0。
如果一个下标在单调栈里,则表示尚未找到下一次温度更高的下标。
class Solution:
def dailyTemperatures(self, T: List[int]) -> List[int]:
stack=[]
result=[0 for _ in range(len(T))]
for i in range(len(T)):
while stack and T[stack[-1]]<T[i]:
s=stack[-1]
stack=stack[:-1]
#if not stack:
result[s]=i-s
stack.append(i)
return result
京公网安备 11010502036488号