题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:首先选取数组中右上角的数字。如果该数字等于要查找的数字,则查找过程结束;如果该数字大于要查找的数字,则剔除这个数字所在的列;如果该数字小于要查找的数字,则剔除这个数字所在的行。同理也可以选择左下角的数字。
代码如下:
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null){
return false;
}
int row = 0;
int col = array[0].length-1;
while(row < array.length && col >= 0){
if(array[row][col] == target)
return true;
if(array[row][col] > target)
col--;
else
row++;
}
return false;
}
}
在提交的过程中犯了个很小的错误以至于没有通过,错误代码是:
public class Solution {
public boolean Find(int target, int [][] array) {
if(array==null){
return false;
}
int row = 0;
int col = array[0].length-1;
while(row < array.length && col >= 0){
if(array[row][col] == target)
return true;
if(array[row][col] > target)
col--;
if(array[row][col] < target)
row++;
}
return false;
}
}
把最后一个else写成if了所以报错,原因是:if无论是否满足条件都会向下执行,直到程序结束;else 满足一个就会停止执行。