题目链接: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;
}
};