发现部分测试用例过不去
来源:2-20 找出一个数组中和为 n 的两个数-双指针的代码演示
站在黄淮大门口
2022-07-15
【用例1】;
[1,2,4]
6
可以修改为
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
let res = []
let length = nums.length;
if (length === 0) return [];
let i = 0;
let j = length - 1;
while (i < j) {
const n1 = nums[i];
const n2 = nums[j];
const sum = n1 + n2
if (sum > target) {
j--
} else if (sum < target) {
i++
// 下面这一行是细节!!!
j = length -1
} else {
res = [i, j]
break;
}
}
return res;
};
【用例二】
[-1,-2,-3,-4,-5]
-8
为了解决用例二,可以使用下面的算法处理
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function (nums, target) {
const map = new Map()
for (let i = 0; i < nums.length; i += 1) {
const n = nums[i];
const n2 = target - n;
if (map.has(n2)) {
return [map.get(n2), i]
} else {
map.set(n, i)
}
}
};
写回答
3回答
-
很好!
感谢补充~
012022-08-31 -
宅到深处自然萌
2024-06-19
j = length -1 这行啥意思?根本没必要啊
00 -
么摩抹墨卡卡
2023-03-24
return [nums[map.get(n2)], n]
00
相似问题