题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
public class Solution {
public boolean Find(int target, int [][] array) {
//从左下角角查(从右上角查也可以)
int i = array.length-1;
int j = 0;
while(i > 0 && j < array[i].length-1){
if(target < array[i][j]){
i--;
}
if(target > array[i][j]){
j++;
}
if(target == array[i][j]){
return true;
}
}
return false;
}
}
或者
public class Solution {
public boolean Find(int target, int [][] array) {
int row=0;
int col=array[0].length-1;
while(row<=array.length-1&&col>=0){
if(target==array[row][col])
return true;
else if(target>array[row][col])
row++;
else
col--;
}
return false;
}
}
这个题要注意数组越界。
错误示范: 假设row已经到了边界,并且进入了第二个if语句,row++后row会越界。
public boolean Find(int target, int [][] array) {
int row = 0;
int col = array[0].length-1;
while (row < array.length-1 && col > 0){
if (array[row][col] == target){
return true;
}
if (array[row][col] < target){
row++;
}
if (array[row][col] > target){
col--;
}
}
return false;
}