LeetCode 1.两数之和(JS)

Given an array of integers, return indices of the two numbers such that they add up to a specific target.

You may assume that each input would have exactly one solution, and you may not use the same element twice.

Example:

Given nums = [2, 7, 11, 15], target = 9,

Because nums[0] + nums[1] = 2 + 7 = 9,
return [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道...

posted @ 2018-03-19 23:13  Kiznaiver  阅读(1271)  评论(0编辑  收藏  举报