package leetcode;
public class demo_74 {
public boolean searchMatrix(int[][] matrix, int target) {
//如果目标值大于数组最大值或小于数组最小值,则不存在
if(matrix[0][0]>target||matrix[matrix.length-1][matrix[0].length-1]<target) {return false;}
int i;
//找出目标值可能存在的行数
for(i=0;i<matrix.length;i++) {
if(matrix[i][matrix[0].length-1]>=target) {break;}
}
//如果当前行的最小值大于目标值,则不存在
if(matrix[i][0]>target) {return false;}
int left=0;
int right=matrix[0].length-1;
int mid;
//二分法查找所在行可能的列数
while(left<=right) {
mid=(left+right)/2;
if(matrix[i][mid]==target) {return true;}
if(matrix[i][mid]>target) {right=mid-1;}
if(matrix[i][mid]<target) {left=mid+1;}
}
return false;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
demo_74 d74=new demo_74();
int[][] matrix= {{1,3,5,7},{11,13,16,20},{23,34,36,60}};
System.out.println(d74.searchMatrix(matrix, 3));
}
}