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