如何实现数组查找

牛客网上的问题描述:数组

在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。函数

本身写了一个很简单的二次循环查找。(在这里边考虑了若是不是数组的状况,原本想写一个自身循环调用的写法,可是都失败了==!)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;
};
相关文章
相关标签/搜索