码迷,mamicode.com
首页 > 编程语言 > 详细

使用二分法查询二维整型数组的值(找到返回其坐标)

时间:2020-03-30 00:03:06      阅读:41      评论:0      收藏:0      [点我收藏+]

标签:http   image   else   dex   坐标   一个   inf   info   find   

 该二维数组的特征是:

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

可以每行都进行二分查找(由于该数组的特征,所以可以先将要查找的数与本行的最后一个数据比较,若大于则直接进入下一行比较,增加效率,减少比较的次数),如果未找到则进入下一层,直到找完该二维数组。

private static String find(int[][] arr, int num) {
int row = 0; //控制行数
while (row < arr.length){
int left = 0; //行的左下标
int right = arr[row].length - 1; //行的右下标
while (left <= right) { //每一行进行二分查找
if(num > arr[row][right]){ //如果查找的数比该行的最后一个数还大,则直接进入下一行的比较
break;
}
//int mid = (left + right) / 2;
int mid = (right - left + 1) / 2 + left; //防止相加超过数据类型的上界
if (arr[row][mid] == num) {
return "[" + row + "," + mid + "]";
} else if (arr[row][mid] > num) {
right = mid - 1;
} else {
left = mid + 1;
}
}//退出该层while循环说明该层未找到
++row; //层数加一
}//退出说明未找到
return "无该整数";
}

 

测试如下:

int[][] arr = {{1,3,5},{7,9},{15,19,20}};
String index = find(arr,1);
System.out.println(index);
String index1 = find(arr,20);
System.out.println(index1);
String index2 = find(arr,9);
System.out.println(index2);
String index3 = find(arr,0);
System.out.println(index3);

技术图片

 

使用二分法查询二维整型数组的值(找到返回其坐标)

标签:http   image   else   dex   坐标   一个   inf   info   find   

原文地址:https://www.cnblogs.com/128-cdy/p/12595893.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有 京ICP备13008772号-2
迷上了代码!