You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python每日温度问题双指针解法输出异常,求错误原因

每日温度问题:双指针解法错误分析与修正

核心错误点

  • 混淆计算目标:题目要求返回的是「等待的天数」,即第一个更高温度的位置与当前位置的索引差r - l,但你的代码计算的是温度差值,完全不符合需求。
  • 双指针移动逻辑错误:当temperatures[r]不大于temperatures[l]时,你直接同时移动l和r,这导致你跳过了后续可能存在的更高温度。比如输入中的75(索引2),你在r=3(71)时就直接移动l到3,错过了后面索引6的76,这才是正确的匹配项。
  • 结果数组不完整:输入数组长度为8,但你的循环只生成了7个元素,最后一个位置(索引7)没有处理,而根据题目要求,该位置的结果必然是0。

修正后的双指针解法(O(n²)时间复杂度)

如果坚持使用双指针思路,正确的逻辑是对每个位置l,从l+1开始向后遍历,直到找到第一个更高的温度,记录索引差;若遍历到末尾都没找到,保持结果为0:

class Solution(object):
    def dailyTemperatures(self, temperatures):
        n = len(temperatures)
        res = [0] * n  # 初始化结果数组,默认值为0
        
        for l in range(n):
            # 从当前位置的下一个开始寻找更高温度
            for r in range(l + 1, n):
                if temperatures[r] > temperatures[l]:
                    res[l] = r - l
                    break  # 找到第一个符合条件的就停止遍历
        
        return res

更高效的单调栈解法(O(n)时间复杂度)

双指针解法在最坏情况(如严格递减数组)下时间复杂度为O(n²),而单调栈可以线性时间解决问题:通过栈存储未找到更高温度的索引,遍历数组时匹配并计算天数差:

class Solution(object):
    def dailyTemperatures(self, temperatures):
        n = len(temperatures)
        res = [0] * n
        stack = []  # 栈中存储索引,对应温度保持单调递增
        
        for r in range(n):
            # 当前温度高于栈顶索引的温度,说明找到了栈顶元素的目标天数
            while stack and temperatures[r] > temperatures[stack[-1]]:
                l = stack.pop()
                res[l] = r - l
            stack.append(r)
        
        return res

测试输入temperatures = [73,74,75,71,69,72,76,73]时,上述两种解法都会返回预期结果[1,1,4,2,1,1,0,0]。

内容的提问来源于stack exchange,提问作者vilnius19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 21:18:18