74. 搜索二维矩阵

74. 搜索二维矩阵

编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

  • 每行中的整数从左到右按升序排列。
  • 每行的第一个整数大于前一行的最后一个整数。

示例 1:

img

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

示例 2:

img

输入: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
  • -104 <= matrix[i][j], target <= 104

思路:

​ 先去寻找元素所在行。然后二分寻找。

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int m=matrix.size();
        int n=matrix[0].size();
        int row=-1;
        //寻找所在行
        for(int i=0;i<m;i++){
            if(matrix[i][0]<=target&&matrix[i][n-1]>=target){
                row=i;
            }
        }
        if(row==-1)return false;
        //二分查找
        int left=0;
        int right=n-1;
        while(left<right){
            int mid=left+(right-left)/2;
            if(target>matrix[row][mid]){
                left++;
            }else if(target<matrix[row][mid])right--;
            else return true;
        }
        return matrix[row][left]==target;//判断一下
    }
};
posted @ 2022-05-24 09:04  BailanZ  阅读(21)  评论(0编辑  收藏  举报