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: trueExample 2:
Input: matrix = [ [1, 3, 5, 7], [10, 11, 16, 20], [23, 30, 34, 50] ] target = 13 Output: false
全程二分查找就行
Success
Runtime: 0 ms, faster than 100.00% of Java online submissions for Search a 2D Matrix.
Memory Usage: 41.2 MB, less than 6.06% of Java online submissions for Search a 2D Matrix.
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int cellnum=matrix.length;
if(cellnum==0){return false;}
int num=matrix[0].length;
if(num==0){return false;}
int l=0;
int r=cellnum-1;
while(l<=r){
int m=(l+r)/2;
if(matrix[m][0]<=target&&matrix[m][num-1]>=target){return bsearch(matrix[m],target,0,num-1);}
if(matrix[m][0]>target){
r=m-1;
continue;
}
if(matrix[m][num-1]<target){
l=m+1;
continue;
}
}
return false;
}
public boolean bsearch(int[] nums,int target,int l,int r){
//System.out.println("enter bsearch");
int m=(l+r)/2;
if(nums[m]==target){return true;}
if(l>=r){return false;}
if(nums[m]>target){
return bsearch(nums,target,l,m-1);
}
if(nums[m]<target){
return bsearch(nums,target,l+1,r);
}
return false;
}
}