搜索有序二维矩阵
只要是对有序数组进行查找,首先一定想到二分查找。
题目:
编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:
- 每行中的整数从左到右按升序排列。
- 每行的第一个整数大于前一行的最后一个整数。
题解:首先按列二分查找,然后按行进行二分查找。
class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
int colomn = searchColomnIndex(matrix,target);
if(colomn<0) return false;
return searchTarget(matrix[colomn],target);
}
public int searchColomnIndex(int[][] matrix,int target){
int m = matrix.length;
int low = -1; // 当low等于-1时的模板
int high = m-1;
while(low<high){
int mid = (low+high+1)/2;
if(matrix[mid][0]<=target){
low = mid;
}else{
high = mid -1;
}
}
return low;
}
public boolean searchTarget(int[] colomn,int target){
int low = 0;// 最底下标为0时的模板
int high = colomn.length-1;
while(low<=high){ // low<=high
int mid = (low+high)/2; // 求中值的方法
if(colomn[mid]==target){
return true;
}else if(colomn[mid]>target){
high = mid - 1;
}else{
low = mid+1;
}
}
return false;
}
}
个人记录。