两数之和(js版本,双指针法和哈希表法)

  1. 双指针法
var twoSum = function(numbers, target) {
    // 双指针法决定l,r,但是不能二分查找,也就是需要一个个遍历。(使用m会错过)
    var l=0,r=numbers.length-1;
    // 下标从1开始
    while(l<r){
        if(l!=r&&numbers[l]+numbers[r]==target) return [++l,++r]
        if(numbers[l]+numbers[r]>target){
            while(numbers[r]==numbers[--r]){};  // 去重
        }else{
            while(numbers[l]==numbers[++l]){};
        }
    }
    return [r,l]
};
  1. 哈希表法
var twoSum = function(numbers, target) {
    // 使用哈希表存储合适差值
    var has={}// key:差值,value:当前索引
    for(var i=0;i<numbers.length;i++){
        if(has[numbers[i]]!=undefined){  // undefined是为了排除0的影响
            return [++has[numbers[i]],++i] // 下标从1开始
        }else{
            has[target-numbers[i]]=i;
        }
    }
};

你可能感兴趣的:(前端,数据结构与算法)