如何實現數組查找

牛客網上的問題描述:數組

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

本身寫了一個很簡單的二次循環查找。(在這裏邊考慮了若是不是數組的狀況,原本想寫一個自身循環調用的寫法,可是都失敗了==!)spa

/**
 * 
 * @param {number} target 
 * @param {number[]} array 
 */
function Find(target, array)
{
    var len = array.length;
    var flag = false;
    for(var i=0; i< len; i++) {
        var ele = array[i];
        if(typeof ele !== 'object') {
            if(target === ele) {
                flag = true;
                continue;
            }
        } else {
            var idx = ele.indexOf(target);
            //flag = (idx!=-1)&&true;
            if(idx !== -1) {
                flag = true;
            }
        }
    }
    return flag;
}

 

在牛客網上分享區裏找到了一個思路,由於題目描述是順序從左至右排列,能夠利用二叉樹查找的方法。code

function Find(target, array) {
    for(var i=0; i<array.length; i++) {
        var low = 0,
            ele = array[i];
        var high = ele.length - 1;
        
        while(low <= high) {
            var mid = Math.floor((low+high)/2);
            if( target < ele[mid]) {
                high = mid - 1;
            }else if( target > ele[mid] ) {
                low = low + 1;
            } else {
                return true;
            }
        }
    }
    return false;
}

 2. blog

/**
 * 給定一個整數數組和一個目標值,找出數組中和爲目標值的兩個數。

 *你能夠假設每一個輸入只對應一種答案,且一樣的元素不能被重複利用。
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
function twoSum(nums, target) {
    var res =[];
    for(var i=0; i<nums.length;i++) {
        for(var j=i+1; j<nums.length; j++) {
            if(i !== j && (nums[i] + nums[j]) === target) {
                res.push(i);
                res.push(j);
                break;
            }
        }
    }
    return res;
};
相關文章
相關標籤/搜索