如何优化严格递增栈实现的LeetCode每日温度问题解法?
每日温度问题超时优化求助
我在解决每日温度问题,给定数组[30,40,50,60],要求返回每个元素对应下一个更高温度的索引差,正确输出应为[1,1,1,0]。
我采用的算法思路如下:
- 从数组末尾向前遍历
- 如果是最后一个元素,向输出列表添加0并将该索引入栈
- 如果当前温度大于栈顶元素对应的温度,计算索引差并加入输出,再将当前索引入栈
- 如果当前温度小于等于栈顶元素对应的温度,则持续出栈直到条件不满足,再更新输出列表和栈
我原本认为这个解法的时间复杂度是O(N),但提交后出现了超时问题,不知道该如何进一步优化。以下是我的Python代码:
def dailyTemperatures(self, temperatures: List[int]) -> List[int]: output = [] r = len(temperatures) - 1 stack = [] while r >= 0: if r == len(temperatures) - 1: stack.append(r) output.insert(0, 0) else: if temperatures[stack[-1]] > temperatures[r]: output.insert(0, stack[-1]-r) stack.append(r) else: while stack and temperatures[stack[-1]] <= temperatures[r]: stack.pop() if len(stack) == 0: output.insert(0, 0) stack.append(r) else: output.insert(0, stack[-1]-r) stack.append((r)) r -= 1 return output
内容的提问来源于stack exchange,提问作者Leo Baby Jacob
相关产品推荐
相关产品推荐

