題目:在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
- 算法思路:
在二位數組中查找,由于數組是有順序的,所以在右上角或者左下角開始查找,每次比較大小都能排除一行或者一列,一直循環找下去即可。 - 實現思路:
采用while循環,每比較一次就按查找的目標前進一行或者一列
function findNumber(arr, num) {
var row = arr.length;
var i = row - 1;
var col=arr[0].length;
var j = 0;
while (i >= 0 && j<=col-1) {
if (arr[i][j] > num) {
i--;
} else if (arr[i][j] < num) {
j++;
} else {
return true;
}
}
return false;
}
for循環
function findNumber(arr, num) {
var row = arr.length;
var col=arr[0].length;
for (var i = 0; i < row;i++) {
for (var j = col-1; j >=0; j--) {
if(arr[i][j]>num){
continue;
}else if(arr[i][j]<num){
//i++;
break;
}else{
return true;
}
}
}
return false;
}
!由于for循環的機制是 初始化-判斷-函數體-表達式-判斷-函數體-表達式。。。由于表達式中已經含有j--和i++所以在函數體中break和continue之后不需要在做j--和i++的運算,如果運算就重復了。