二维数组中的查找
题目:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序,请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数
解决:
思路一:暴力破解
直接遍历一遍二维数组,就可以找出是否存在,这里的时间复杂度为O(n2)
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(array[i][j] == target)
return true;
}
}
return false;
}
思路二:改进
根据题目的信息,我们知道数组从左到右递增,从上到下递增,我们可以利用此特点,从右上角开始判断,如果右上角的数字比target的大,那么一定是在下方,如果比target小,那么一定是在左边,一次类推,可以减少时间复杂度。
public boolean Find(int target, int [][] array) {
int i = 0;
int j = array[0].length-1;
//进行判断
while(i<array.length && j>=0){
int leftTop = array[i][j];
if(target<leftTop){//往左走
j--;
}
else if(target > leftTop){//往下走
i++;
}
else
return true;
}
return false;
}