题目:
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
解题思路:查找的本质是排除 在本题目中,由于是一个非递减的二维数组,所以,对于每一行,最后一个元素是该行最大的元素,该元素所对应的列中,该元素是最小的。
由这个特性,我们可以将目标值与最左上角的值进行比较(若小于),说明第一行被排除; 将目标值与右下角元素进行比较(若大于),第一列被排除
public class Array {
public boolean Find(int target, int [][] array) {
//如果数组为空,直接返回false
if(array == null){
return false;
}
//确定两个初始值,标记二维数组的下标
int n = 0;//横
int m = array[0].length-1;//纵
//循环条件 :横坐标小于数组长度;纵坐标大于等于0
while(n<array.length && m>=0){
//目标值小于右上方的数,则纵坐标减一
if(target<array[n][m]){
m--;
}
//如果目标值大于左下方数,则横坐标加一
else if(target>array[n][m]){
n++;
}
else
return true;
}
return false;
}
}
ps:如有不足,感谢指导!