public class 二分法查找矩阵数据 {
public static void main(String[] args) {
int [][] arr={
{11,14,24,34},
{41,45,56,61},
{64,84,90,101}
};
System.out.println(select(arr,61));
}
// 这种二叉查找更加简单,空间复杂度更低
static public boolean select(int [][] arr, int target){
// 1.当二维数组容量为0时,false
if (arr.length==0 || arr[0].length==0) {
return false;
}
// 2.初始数据:start:第一个数据 end:最后一个数据 mid:中间值
// 3.在start小于end的条件之下循环,条件是arr[mid/len_2][mid%len_2] : target
// 4.公式获取==模运算
/*
当我们获取的7个数据时,行应该是7除这一行的长度,列为余数
*/
int len_1= arr.length;
int len_2= arr[0].length;
int start =0,end=len_2*len_1-1,mid;
while(start<=end){
mid=(start+end)/2;
if (arr[mid/len_2][mid%len_2] < target) {
start=mid+1;
}if (arr[mid/len_2][mid%len_2] > target) {
end=mid;
}if(arr[mid/len_2][mid%len_2] == target){
// System.out.println(mid/len_2+","+mid%len_2);
return true;
}
}
return false;
}
}
这样的二分查找应该是复杂度比较低的