如何实现数组查找

牛客网上的问题描述:

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

自己写了一个很简单的二次循环查找。(在这里边考虑了如果不是数组的情况,本来想写一个自身循环调用的写法,但是都失败了==!)

/**
 * 
 * @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;
}

 

在牛客网上分享区里找到了一个思路,因为题目描述是顺序从左至右排列,可以利用二叉树查找的方法。

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. 

/**
 * 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。

 *你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。
 * @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;
};

 

posted @ 2018-05-03 15:18  echo2016  阅读(4124)  评论(0编辑  收藏  举报