js實現二維數組中查找目標數算法

題目

在一個二維數組中(每個一維數組的長度相同),每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。

分析:數組中任意找一個數,它的左邊都小於它,它的下邊都大於它。如果要找的數(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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章