题目
编写一个高效的算法来判断 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
提示:
m == matrix.length
n == matrix[i].length
1 <= m, n <= 100
-104 <= matrix[i][j], target <= 104
解题思路
循环每一行,通过二分查找来在每一行中寻找是否有值等于target
如果有则进行判断:
如果是第一行,则return true;
如果每行的第一个整数大于前一行的最后一个整数 则return true;
代码
class Solution {
public:
bool searchMatrix(vector<vector<int>>& matrix, int target) {
int i,k=matrix.size(),l=matrix[0].size();
for(i = 0;i<k;i++)
{
int left=0,right=l-1;
while(left<=right)
{ int mid = left+(right-left)/2;
if(matrix[i][mid]>target)right=mid-1;
else if(matrix[i][mid]==target)
{
if(i==0)return true;
else if(matrix[i][0]>matrix[i-1][l-1])return true;
}
else left = mid+1;
}
}
return false;
}
};