題目
在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。
分析:數組中任意找一個數,它的左邊都小於它,它的下邊都大於它。如果要找的數(target)大於這個數,那就向下找;小於這個數就向左找。那麼我們應該取哪個數與target做比較呢?首先我們先想到是數組四個角的數,第一個數和最後一個數都不行(因爲他們右下或左上與它們的關係是一樣的,要麼都大於它,要麼都小於它,這樣我們沒法做上面的判斷);所以我們可以取右上角或者左下角的數開始判斷,下面就是代碼:
// 方法1:從右上角的數開始爲判斷的初始點
function Find(target, array)
{
// write code here
var row = array.length;
var col = array[0].length;
var i =0 ;
var j = col-1;
while(i < row && j>=0){
if(array[i][j]>target){
j--;
continue;
}else if(array[i][j]<target){
i++;
continue;
}else{
//return true;
console.log("這個數所在的行和列是:", i,j);
}
return false;
}
}
// 方法1:從左下角的數開始爲判斷的初始點
function Find(target, array)
{
var row=array.length,
col=array[0].length,
i=row-1,
j=0;
while(i>=0&&j<col){
if(array[i][j]>target){
i--;
continue;
}else if(array[i][j]<target){
j++;
continue;
}else{
//return true;
console.log("這個數所在的行和列是:", i,j);
break;
}
return false;
}
}
var arr= [[1,2,3],[2,3,5],[3,6,9]];
Find(6,arr); //這個數所在的行和列是: 2 1