题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
分析
方法一:暴力破解
public class Solution {
public boolean Find(int target, int [][] array) {
//1、暴力破解
boolean flag = false;
for(int i = 0 ; i < array.length ; i++){
for(int j = 0 ; j < array[i].length ; j++){
if(array[i][j] == target){
flag = true;
}
}
}
return flag;
}
}
方法二:二分查找
由于题中说明数组横纵都是有序的,那么在有序这个条件下进行查找,可以想到二分查找。
思路:遍历每一行子数组,用二分查找,判断是在左半部分还是在右半部分。
public class Solution {
public boolean Find(int target, int [][] array) {
boolean flag = false;
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{
flag = true;
break;
}
}
}
return flag;
}
}