题目:在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
我的代码:
int x=array.length;
int biaozhi=0;
if(target<array[0][0]||target>array[x-1][x-1]) {
return false;
}
for(int i=0;i<x;i++) {
if(target<=array[i][x-1]) {
if(target==array[i][x-1]) {
biaozhi=1;
break;}
for(int j=0;j<x;j++) {
if(target==array[i][j]) {
biaozhi=1;
break;
}
}
}
}
if(biaozhi==0) {
return false;
}
else return true;
}
思路:查找右上角的数字,由于数组是顺序排列的,每一行最右边的数字是每行最大的,通过比较,知道目标数字在哪一行,循环次数最少。
结果:未通过[[]]空数组的测试,和7,[[1,2,8,9],[4,7,10,13]]测试
原因分析:使用for循环出现空数组异常,是因为在for循环里面没有用到关于数组的判断。未通过7,[[1,2,8,9],[4,7,10,13]]异常是因为超过数组长度,array.length得到行数,array[0][]得到列数。
正确的代码:
int j=0;
int i=array.length-1;
while(i>=0&&j<=array[0].length-1)
{
if(target==array[i][j]){
return true;
}
else if(target>array[i][j]){
j++;
}
else{
i--;
}
}
return false;