LeetCode记录 两数之和

    技术2026-01-24  8

    两数之和

    日期:2020年7月4日21:27:55

    难度:简单

    用时:近3小时

    分类:hash(哈希)

    题目内容:

    给定一个整数数组nums和一个目标值target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

    示例:

    给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]

    解法:

    暴力枚举O(n2)双哈希表O(n)一遍哈希表O(n)

    自我尝试——错误

    /* 自我尝试 * 无法解决 [3,2,3],6 * 题目没看明白,这种方法适用于解决连续的一串,估计是上次看了另一题受影响了。。。 */ var twoSum = function (nums, target) { let queue = []; let sum = 0; let mp = []; for (let i = 0; i < nums.length; i++) { mp[nums[i]] = i; // 根据值决定 if (nums[i] <= target) { if (sum + nums[i] <= target) { // 如果放得下 queue.push(nums[i]); sum += nums[i]; if (target === sum) { break; } } else { while (sum + nums[i] > target) { sum -= queue[0]; queue.shift(); } queue.push(nums[i]); sum += nums[i]; if (target === sum) { break; } } } } return queue.map(function (v) { return mp[v]; }); }; console.log(twoSum([3, 2, 4], 6));

    正解3(一遍哈希表)

    太真实了,正确的代码往往那么少。。。以后要是觉得写多了 估计就是错的了

    var twoSum = function (nums, target) { let mp = [];// 用数组没用new Map() 减小内存 for (let i = 0; i < nums.length; i++) { if (undefined !== mp[target - nums[i]]) { return [mp[target - nums[i]], i]; } mp[nums[i]] = i; } };
    Processed: 0.016, SQL: 9