编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。
示例 1:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 3
输出:true
示例 2:
输入:matrix = [[1,3,5,7],[10,11,16,20],[23,30,34,60]], target = 13
输出:false
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int up = 0,down = matrix.size()-1;
int left = 0,right = matrix[0].size()-1;
while(up<down){
int mid =(up+down)/2;
if(matrix[mid][right]==target) return true;
else if(matrix[mid][right]<target) up = mid+1;
else down = mid;
}
if(matrix[up][0]==target) return true;
while(left<right){
int mid =(left+right)/2;
if(matrix[up][mid]==target) return true;
else if(matrix[up][mid]<target) left = mid+1;
else right = mid;
}
if(matrix[up][left] == target) return true;
return false;
}
};