在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
方法一:二分查找
思路:其实就是将每一行都当作是有序的一维数组进行二分查找,然后遍历每一行,代码如下:
public class Solution {
public boolean Find(int target, int [][] array) {
for(int i = 0;i<array.length;i++){
int begin = 0;
int end = array[i].length-1;
while(begin <= end){
int middle = (begin + end)/2;
if(target < array[i][middle]){
end = middle-1;
}else
if(target > array[i][middle]){
begin = middle+1;
}else
return true;
}
}
return false;
}
}
方法二
从右上角开始比较,等于要查找的数的话直接返回true,如果比查找的数小,则将该行剔除,如果比查找的数大,则将该列剔除,代码如下:
public static boolean searchRight(int[][] arr,int target) {
//数组长度为0直接返回false
if(arr.length>0 && arr[0].length>0 ) {
int row=0;
int col=arr[row].length-1;
while(col>=0&&arr[row].length>=0) {
if(arr[row][col]==target) {
return true;
}else if(arr[row][col]>target) {
col--;
}else{
row++;
}
}
}
return false;
}