LongDz 的数字文墨提案

74. 搜索二维矩阵

3 min

题目

搜索二维矩阵 中等

解法:二分查找

思路

将二维矩阵视为一维有序数组,应用二分查找。

由于矩阵每行内部有序且行间首尾相接严格递增,整体可线性化为严格递增序列,二分查找能准确定位任意元素而不遗漏最优解。

  • Step 1: 计算矩阵总长度 mn,初始化左右指针 left=0, right=mn-1
  • Step 2: 循环二分,计算中间索引 mid = (left + right) / 2
  • Step 3: 将 mid 转换为二维坐标 (mid/n, mid%n) 获取对应值
  • Step 4: 比较 val 与 target,调整左右指针范围
  • Step 5: 找到返回 true,否则循环结束返回 false

复杂度

  • 时间复杂度: O(log(m×n))O(\log(m \times n))
  • 空间复杂度: O(1)O(1)

代码

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m = matrix.size();
        int n = matrix[0].size();

        int left = 0, right = m*n - 1;

        while(left <= right){
            int mid = (left + right) / 2;

            int val = matrix[mid / n][mid % n];

            if(val == target) return true;
            else if(val < target) left = mid + 1;
            else right = mid - 1;
        }

        return false;
    }
};