0
点赞
收藏
分享

微信扫一扫

leetcode 240. 搜索二维矩阵 II

一脸伟人痣 2023-05-11 阅读 44

题目链接:leetcode 240

1.题目

编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target 。该矩阵具有以下特性:

每行的元素从左到右升序排列。
每列的元素从上到下升序排列。

2.示例

1)示例1
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 5
输出:true

2)示例 2:
输入:matrix = [[1,4,7,11,15],[2,5,8,12,19],[3,6,9,16,22],[10,13,14,17,24],[18,21,23,26,30]], target = 20
输出:false

3)提示:
m == matrix.length
n == matrix[i].length
1 <= n, m <= 300
-109 <= matrix[i][j] <= 109
每行的所有元素从左到右升序排列
每列的所有元素从上到下升序排列
-109 <= target <= 109

3.分析

1)首先最终容易想到的办法就是遍历整个数组,那么时间复杂度为O(n^2)
2)另外一个比较容易想到的方法就是 二分法,因为元素是具有单调性的,时间复杂度为O(mlogn)
3)考虑到从右上角元素出发,当target相等时返回true,当target<当前元素时,列–,当target>当前元素时,row++

4.代码

class Solution {
public:
    bool searchMatrix(vector<vector<int>>& matrix, int target) {
        int row=0,col=matrix[0].size()-1;
        while(true){
            if(matrix[row][col]==target) return true;
            if(matrix[row][col]<target) {
                if(row+1<=matrix.size()-1) row++;
                else break;
            }
            else{
                if(col-1>=0) col--;
                else break;
            }
        }
        return false;
    }
};
举报

相关推荐

0 条评论