題目:在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
我的代碼:
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;