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

LeetCode 74.搜索二维矩阵出现堆缓冲区溢出,遗漏了什么条件?

错误原因

你写的while循环边界条件存在错误:

  • 变量i是矩阵的行索引,合法取值范围是0 ~ m(m是矩阵行数减1),但你在循环判断中写的是i <= n,n是矩阵列数减1,当矩阵行数小于列数时,会出现行索引越界访问的问题。

我们用你给出的失败测试用例复现错误过程:

  • 测试用例矩阵为[[-1,3]],对应m=0(共1行,行索引最大为0),n=1(共2列,列索引最大为1),目标值为1
  • 第一次循环:i=0, j=1,目标值1小于matrix[0][1]的3,j减为0
  • 第二次循环:i=0, j=0,目标值1大于matrix[0][0]的-1,i加为1
  • 第三次循环判断i<=n即1<=1成立,尝试访问matrix[1][0],但矩阵不存在索引为1的行,触发堆缓冲区溢出错误。
修复方案

只需要把while循环的行索引判断条件从i<=n改为i<=m即可,修正后的完整代码如下:

bool searchMatrix(vector<vector<int>>& matrix, int target) {
    int m=matrix.size()-1, n= matrix[0].size()-1;
    int i=0, j=n;
    int small=matrix[0][0], large=matrix[m][n];
    if(target<small || target>large)return false;
    
    while(i<=m && j>=0){
        if(target==matrix[i][j])return true;
        if(target<matrix[i][j])j--;
        else i++;
    }
    return false;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 09:15:03