题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
思路:
要找到目标的元素,我们需要不断地去缩小我们的查询范围。
如果从左上角第一个元素查起的话,那么当你查找的元素比第一个元素大的话,你可以往右走也可以往下走。
但是如果我们从右上角的第一个元素走的话,如果查找的元素与之相等,则查询结束。如果当前元素比查询的元素的小,那么你就可以向下走,因为同一行左边的元素都比当前元素小,如果当前元素比查询的元素大,那么就要往左走,这样就可以确定每次走的方向只有一个。
所以代码就是很简单,遍历一下就好了。
public boolean Find(int target, int [][] matrix) {
if(matrix==null || matrix.length==0||matrix[0].length==0){
return false;
}
int R = matrix.length;
int C = matrix[0].length;
//从右上角的第一个元素开始
int r =0,c = C-1;
while(r<R&&c>=0){
//找到目标元素
if(matrix[r][c]==target){
return true;
}else if(target > matrix[r][c]){
//如果当前元素比目标元素小,往下走
r++;
continue;
}else{
//如果当前元素比目标元素大,往左走
c--;
continue;
}
}
//遍历整个二维数组都没有找到的话,则返回false
return false;
}