Skip to content

0074.搜索二维矩阵

给你一个满足下述两条属性的 m x n 整数矩阵:

每行中的整数从左到右按非严格递增顺序排列。 每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target ,如果 target 在矩阵中,返回 true ;否则,返回 false 。

示例 1:

1768723309929

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3 输出:true

示例 2:

1768723337019

输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13 输出:false

提示:

  • \(m == matrix.length\)
  • \(n == matrix[i].length\)
  • \(1 <= m, n <= 100\)
  • \(-10^4 <= matrix[i][j], target <= 10^4\)

思路

以示例1为例: 1768727302171

解答

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        if(matrix.empty()||matrix[0].empty()) return false;

        int m = matrix.size();
        int n = matrix[0].size();
        int left = 0;
        int right = m*n-1;

        while(left <= right){
            int mid = left + (right - left)/2;
            int row = mid / n;
            int col = mid % n;

            if(matrix[row][col]==target) return true;
            else if(matrix[row][col]<target) left = mid+1;
            else right = mid -1;
        }
        return false;
    }
};