题目描述:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
1.使用最暴力的方法,将数组通过两次for循环进行遍历,判断其是否有该数字
public class Solution {
public boolean Find(int target, int [][] array) {
for(int i=0;i<array.length;i++){
for(int j=0;j<array[0].length;j++){
if(target==array[i][j]){
return true;
}
}
}
return false;
}
}
2.观察该数组,发现从上到下,从左到右其元素都会递增。那么可以考虑取左下角的元素作为一个参考,若目标元素比该元素大,则目标元素必在该元素右侧,反之,目标元素必在该元素上方。当然,也可以取右上角的元素做参考,同理。
注意的点:获取数组的行数和列数
行数:arr.length
列数:arr[0].length
public class Solution {
public boolean Find(int target, int [][] array) {
int x=0;
int y=array.length-1;
while( x<array[0].length&&y>=0){
if(target==array[x][y]){
return true;
}else if(target>array[x][y]){
x++;
}else{
y--;
}
}
return false;
}
}