题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:
由于矩阵是有序的,每一行从左到右递增,每一列从上到下递增。可以考虑从数组的的右上角的数字和目标数字相比较,如果目标数字小于右上角的数字,说明目标数字不再右上角数字所在的列,应该在右上角数字左边的区域,可以舍弃右上角数字所在的列,这样可以继续选择剩下区域的右上角数字进行比较。如果右上角数字大于目标数字,则说明右上角所在的行的数字都小于目标数字,目标数字只可能在右上角数字所在行的下方,此时可以舍弃右上角数字所在的行,这样可以继续选择剩下区域的右上角数字进行比较。通过这样逐步缩小查找范围,大于目标数字则舍弃一行,小于目标数字则舍弃一列,直到最后找到目标数字,如果找不到,行下标等于总的行数或者列下标小于0.以下为具体的Java代码:
public class Solution {
public boolean Find(int target, int [][] array) {
int j=array[0].length;
int c=j;
j--;
int r=array.length;
int i=0;
while(i<r && j>=0){
if(target<array[i][j]){
j--;
}
else if(target>array[i][j]){
i++;
}
else{
return true;
}
}
return false;
}
}