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

二维数组中的查找

时间:2018-06-08 15:57:30      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:存在   tar   排序   rgs   i++   lag   数组   遍历   推荐   

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。

思路:二分查找

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;

二维数组中的查找

标签:存在   tar   排序   rgs   i++   lag   数组   遍历   推荐   

原文地址:https://www.cnblogs.com/cyjwdx102355/p/9155698.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!