Write an efficient algorithm that searches for a value in an m x n matrix. This matrix has the following properties:
Integers in each row are sorted from left to right.
The first integer of each row is greater than the last integer of the previous row.
Example 1:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3
Output: true
Example 2:
Input:
matrix = [
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 13
Output: false
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/search-a-2d-matrix
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int n = matrix.length;
if(n==0) return false;
int m = matrix[0].length;
if(m==0) return false;
int left = 0;
int right = n*m- 1;
int mid = left + (right - left)/2;
while(left <= right){
if(matrix[mid/m][mid%m] == target){
return true;
}else if(matrix[mid/m][mid%m]>target){
right = mid -1;
}else{
left = mid +1;
}
mid = left + (right - left)/2;
}
return false;
}
}