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

LeetCode每日温度题运行报错:reference binding to misaligned address

解决LeetCode「每日温度」递归栈实现的运行时错误

错误原因分析

  • 空栈直接访问top():check函数里刚创建空栈就调用st.top(),这会触发未定义行为,是你看到内存对齐错误的直接原因。
  • dp向量未预分配空间:dp初始为空,直接用dp[i]赋值会导致越界访问,引发内存问题。
  • 局部栈无法复用状态:每次调用check都新建空栈,完全无法记录之前遍历过的索引,违背单调栈解法的核心逻辑,递归也无法传递栈状态。
  • 递归逻辑混乱:判断栈是否为空的顺序颠倒,递归调用时没有保留栈状态,根本无法实现“找下一个更高温度”的逻辑。

修正后的递归+单调栈实现

class Solution {
public:
    vector<int> dailyTemperatures(vector<int>& temps) {
        int n = temps.size();
        vector<int> dp(n, 0);
        stack<int> st;
        check(n - 1, temps, dp, st);
        return dp;
    }

    void check(int i, vector<int>& temps, vector<int>& dp, stack<int>& st) {
        if (i < 0) return;
        
        // 弹出栈中所有温度不大于当前值的索引
        while (!st.empty() && temps[i] >= temps[st.top()]) {
            st.pop();
        }
        // 计算当前位置的结果
        dp[i] = st.empty() ? 0 : st.top() - i;
        // 当前索引入栈,供前面的元素对比
        st.push(i);
        // 递归处理前一个元素
        check(i - 1, temps, dp, st);
    }
};

关键修正点

  • 将栈作为引用参数传递,确保递归过程中栈的状态能被复用。
  • 预先初始化dp的大小为输入数组长度,避免越界访问。
  • 调整逻辑顺序:先清理栈中无效元素,再计算结果,最后入栈当前索引,符合单调栈的核心逻辑。
  • 递归从最后一个元素向前遍历,保证栈中始终保存后续未处理的元素索引。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:55:21