題目:在一個(gè)二維數(shù)組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請(qǐng)完成一個(gè)函數(shù),輸入這樣的一個(gè)二維數(shù)組和一個(gè)整數(shù),判斷數(shù)組中是否含有該整數(shù)。
- 算法思路:
在二位數(shù)組中查找,由于數(shù)組是有順序的,所以在右上角或者左下角開始查找,每次比較大小都能排除一行或者一列,一直循環(huán)找下去即可。 - 實(shí)現(xiàn)思路:
采用while循環(huán),每比較一次就按查找的目標(biāo)前進(jìn)一行或者一列
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循環(huán)
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循環(huán)的機(jī)制是 初始化-判斷-函數(shù)體-表達(dá)式-判斷-函數(shù)體-表達(dá)式。。。由于表達(dá)式中已經(jīng)含有j--和i++所以在函數(shù)體中break和continue之后不需要在做j--和i++的運(yùn)算,如果運(yùn)算就重復(fù)了。