一、题目描述
在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
二、我的解
public class Solution {
public boolean Find(int target, int [][] array) {
int i = 0;
for(; i < array.length && array[0].length - 1 >= 0; i++){//遍历二维数组行
if(array[i][0] <= target){//找到适应的行
for(int j = 0; j < array[i].length; j++){//遍历二维数组列
if(array[i][j] == target)//相等则含有该整数
return true;
}
}
}
return false;
}
}
三、总结
1. 忘了二维数组的行数和列数
行数 = array.length
列数 = array[0].length
2. 没有考虑到输入的数组为空,或者列数为0的情况
3. for循环的结构忘了一点
int i = 0;
for( ;i < 10 ;i++)
4. while循环很久没用,生疏了
public class Solution {
public boolean Find(int target, int [][] array) {
int i = array.length - 1;//行数
int columnLength = array[0].length;//列数
int j = 0;//列数
while( i >= 0 && columnLength > 0){
j = 0;
if(array[i][0] <= target){//行第一列<target,则遍历此行往右找
while(j < columnLength){
if(array[i][j] == target)
return true;
if(array[i][j] > target)//稍微优化,尽早退出
break;
j++;
}
}
i--;
}
return false;
}
}