编写一个高效的算法来判断 m x n 矩阵中,是否存在一个目标值。该矩阵具有如下特性:

每行中的整数从左到右按升序排列。
每行的第一个整数大于前一行的最后一个整数。

74. 搜索二维矩阵_数据结构

 

class Solution {
public boolean searchMatrix(int[][] matrix, int target) {
/**
第一次二分查找小于target的最后一个元素(在第一列里面找)
第二次二分在当前列找target
*/
return search1(matrix,target);

}

public boolean search1(int [][] matrix,int target){//查找小于target的最后一个元素
int left=0,right=matrix.length-1,mid;
while(left<right){
mid=right+left+1>>1;
if(matrix[mid][0]<=target){
left=mid;
}else {
right=mid-1;
}
}

if(matrix[left][0]==target) return true;//防止[[1]]这中情况
if(matrix[left][0]>target) return false;
int arr[] =matrix[left];
left=0;right=arr.length-1;

while(left<right){
mid=right+left+1>>1;
if(arr[mid]<=target){
left=mid;
}else if(arr[mid]>target){
right=mid-1;
}
}
return arr[left]==target?true:false;

}
}