LeetCode 1.两数之和

Posted Code Kiznaiver

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1.两数之和相关的知识,希望对你有一定的参考价值。

题目描述:

给定一个整数数列,找出其中和为特定值的那两个数。

你可以假设每个输入都只会有一种答案,同样的元素不能被重用。

示例:

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

先Po代码:

/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
    var arr = {};
    for (var i = 0; i < nums.length; i++) {
        if (typeof(arr[nums[i]]) !== "undefined"){
            return [arr[nums[i]], i];                        
        }                         
        arr[target - nums[i]] = i;
    }
};

题解:

这道题呢,用的是散列表的方式,循环一遍去找。

但是一开始脑子抽了......太久没刷题, 啥也没考虑到,比如负数啦云云:(

arr[target - nums[i]] = i;这个的核心是这句, 我用目标数-当前数,去寻找之后需要哪个数,并用下标设为它的值进行储存。(这里如果arr用数组的话,我试着也是可以的,但是应该进行了什么我目前还不知道的转换?所以耗时会多一点)

然后接着开头判断,如果当前的nums[i]就是我们之前要找的target - nums[i],也就是它arr[sums[i]]会等于之前留存下的下标i, 否则为undefine(Ps: 这里不能偷懒简写 if (arr[nums[i]]), 因为要考虑到0值)

很简单的题啦...太久没刷OJ了, 脑子都锈掉了, 立个Flag, 每周刷7道...

以上是关于LeetCode 1.两数之和的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 1两数之和

LeetCode——1.两数之和

LeetCode第5天 - 283. 移动零 | 167. 两数之和 II - 输入有序数组

LeetCode 两数之和 twoSum

LeetCode:两数之和

leetcode_01两数之和