尝试四种解法,其中双指针失败了,思路找错了,暂时没有更好的解题方法,不知道力扣100%的解题是咋写的。。。。
直接贴代码:
// 1.不推荐
var Sum = function (nums, target) {
var newarr = []
for (let index = 0; index < nums.length; index++) {
const item = nums[index];
for (let i = 0; i < nums.length; i++) {
const t = nums[i];
if (index !== i) {
if (item + t === target){ newarr = [index,i];}
}
}
console.log(newarr);
}
return newarr
};
// 2.差值暴力 --- 通过相减来找到另一个数,查这个数存在且不等于它本身
function tSum(array,target){
for (let index = 0; index < array.length; index++) {
let diff = target-array[index]
let diffIndex = array.indexOf(diff)
if(diffIndex !==-1 &&diffIndex!==index){
return [diffIndex,index]
}
}
return []
}
var ts = tSum([3, 2, 7, 81, 3, 2, 5, 6, 4, 5, 2, 12, 9, 4], 6)
console.error(ts);
// 3.map解 -- 节省indexOf带来的循环 降低时间复杂度 但是增加空间复杂度(存储map)
function mSum(array,target){
let map = new Map()
for (let index = 0; index < array.length; index++) {
let diff = target-array[index]
if(!map.has(diff)){
map.set(array[index],index)
}else{
return [map.get(diff),index]
}
}
return []
}
var ms = mSum([3, 2, 7, 81, 3, 2, 5, 6, 4, 5, 2, 12, 9, 4], 6)
console.error(ms);
// 2.双指针
var twoSum = function (nums, target) {
nums.sort(function(a,b){
return a - b
})
console.warn(nums);
let arr
let l = 0
let r = nums.length - 1
while (l < r) {
if(nums[r]+nums[l]==target){
arr = [l,r]
}
nums[r] > target?r--:l++;
console.log(r,l);
}
return arr
};
var d = twoSum([3, 2, 7, 81, 3, 2, 5, 6, 4, 5, 2, 12, 9, 4], 6)
console.error(d);