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 @   BailanZ  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示