题目描述:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:由于每一行和每一列都是已经排好序了的,如果在这一行的最后一个元素比目标值还要小的话,那么这一行的所有书都比目标值小;同理如果一列中的第一个元素都比目标值大的话,那么这一列的所有元素都比目标值大。因此我们只需要判断目标值和二维矩阵右上角的元素的值的大小就可以决定删除行还是列了,如果相等那么就找到了。具体代码如下:
public class Solution {
public boolean Find(int target, int [][] array) {
int Size = array.length;
int l = array[0].length;
if(Size<1||l<1)//注意此处的判断条件防止数组中没有任何元素
return false;
if(target<array[0][0]||target>array[Size-1][l-1])
return false;
int x=0,y=l-1;
while(true){
if(target<array[x][y]){
x=x;
y-=1;
}else if(target > array[x][y]){
x+=1;
y=y;
}
if(x>=Size||y<0)//此处已经超过了数组的边界
return false;
if(target==array[x][y])
return true;
}
}
}