使用单调栈,寻找第一个比当前元素大的元素。使用单调递减栈,然后当当前元素比栈顶元素大,栈顶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