- 双指针法
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]
};
- 哈希表法
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;
}
}
};