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

Python有序二维矩阵搜索时for循环仅访问第一行问题求解

问题根因
  • return语句位置错误,第一行遍历完成后就直接终止了整个函数,具体有两处错误逻辑:
    1. 处理长度为1的行的分支中,只要当前行没有匹配到目标,就直接执行return False,直接结束函数,不会进入下一行遍历
    2. 普通行二分查找结束后没有找到目标时,直接在else分支末尾执行return False,同样直接终止函数,不会继续遍历后续行
      两个分支只要走完第一行,无论是否找到目标都会触发全局返回,所以for循环只会执行i=0的第一轮。
修复方案

你需要把未找到目标的返回逻辑移到for循环外部,只有所有行都遍历完成后仍未找到目标,才返回False。同时还有两处可优化的细节:

  1. 二分查找的右边界应该取当前行matrix[i]的长度,不要固定取matrix[0],避免各行长度不一致时出现索引错误
  2. mid值推荐用整数除法//计算,避免浮点运算的精度问题,比round更稳妥

修复后的代码如下:

def searchMatrix(self, matrix, target) -> bool:
    m = len(matrix) 
    print(m)

    for i in range(m):  
        print(i)
        row_len = len(matrix[i])
        if row_len == 1:
            if matrix[i][0] == target:   
                return True
            # 没找到不要返回,继续下一行
        else: 
            start = 0
            end = row_len - 1
            while start <= end :
                    mid = (start + end) // 2
                    if matrix[i][mid] == target:
                        return True
                    elif matrix[i][mid] > target:
                        end = mid - 1
                    else:
                        start = start + 1        
    # 所有行都遍历完还没找到,再返回False
    return False

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.08 10:48:02