二维数组中的查找
Posted cyjwdx102355
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二维数组中的查找相关的知识,希望对你有一定的参考价值。
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:二分查找
public class test {
public static boolean Find(int target, int[][] array) {
if(array == null || array.length == 0||(array.length==1&&array[0].length==0)){ //判断二维数组是否为空
return false;
}
for (int i = 0; i < array.length; i++) {
int max1 = array[i].length - 1;
int min1 = 0;
int mid1 = (min1 + max1) / 2;
while (array[i][mid1] != target) {
if (target > array[i][mid1]) {
min1 = mid1 + 1;
} else if (target < array[i][mid1]) {
max1 = mid1 - 1;
}
if (max1 < min1) {
break;//二维数组的每一行元素,当max<min时表示没有查找到目标值,则跳出while循环
}
mid1 = (min1 + max1) / 2;
}
if(array[i][mid1] == target) { //若在某一行查找到目标值,则返回true
return true;
}else{
continue; //所查找行不存在目标值,则跳出for循环的本次循环
}
}
return false; //当for循环遍历完成,没有找到目标值,则会运行该步。
}
public static void main(String[] args){
int target = 11;
int[][] array = {{}};
boolean flag = Find(target,array);
System.out.println("flag:"+flag);
}
}
牛客网讨论区推荐解法:
for (int i = 0; i < array.length; i++) {
int low = 0;
int high = array[i].length - 1;
while (low <= high) {
int mid = (low + high) / 2;
if (target > array[i][mid])
low = mid + 1;
else if (target < array[i][mid])
high = mid - 1;
else
return true;
}
}
return false;
以上是关于二维数组中的查找的主要内容,如果未能解决你的问题,请参考以下文章