发现部分测试用例过不去

来源: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回答

双越

2022-07-15

很好!

感谢补充~

0
1
Le814253
第一个优化提出的场景没有太明白,能明示下吗? 课程当中的代码直接跑给出[1,2,4],6这个用例是跑的通的
2022-08-31
共1条回复

宅到深处自然萌

2024-06-19

j = length -1 这行啥意思?根本没必要啊

0
0

么摩抹墨卡卡

2023-03-24

return [nums[map.get(n2)], n]

0
0

2周刷完100道前端优质面试真题 双越最新力作

『前端面试真题100道』视频详解

1509 学习 · 642 问题

查看课程