Two Sum

题目,在这里只给出题目的链接,想了解的可以直接点击进去,这里就不粘贴了

所用语言: JavaScript
解法及思路

  1. 一看题目,首先想到的就是直接遍历,代码如下
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
        var result = [];
        for(var index in nums) {
            var second = target - nums[index];
            var indexOfSecond = nums.indexOf(second);
            if(index != indexOfSecond && indexOfSecond != -1) {
                result.push(parseInt(index) + 1, indexOfSecond + 1);
                break;
            }
        }
        return result;
};

看似没什么问题,但最终却报超时Time Limit Exceeded,原来还追求性能啊,看来暴力遍历是不可取的

  1. 那既然是这样,就优化一下吧,首相想到的是把输入中不合适的数据过滤掉,比如比target还要大的数
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
        var result = [];
        var newNums = [];
        nums.forEach(function(val) {
            if(val < target) {
                newNums.push(val);
            }
        });
        for(var index in newNums) {
            var second = target - newNums[index];
            var indexOfSecond = newNums.indexOf(second);
            if(index != indexOfSecond && indexOfSecond != -1) {
                result.push(parseInt(index) + 1, indexOfSecond + 1);
                break;
            }
        }
        return result;
};

但最终还是和上面一样的结果Time Limit Exceeded,而且不满足所有的情况,按照题目的意思,是需要把负数考虑进去的

  1. 这个时候,可以使用hashTable来解决,对应就是使用JavaScript中的对象
/**
 * @param {number[]} nums
 * @param {number} target
 * @return {number[]}
 */
var twoSum = function(nums, target) {
        var map = {};
        for(var i in nums) {
            map[nums[i]] = parseInt(i);
        }
        for(i in nums) {
            var first = nums[i];
            var second = target - first;
            if(map.hasOwnProperty(second)) {
                i = parseInt(i);
                if(map[second]++ != i++) { 
                    return [i, map[second]];
                }
            }
        }   
};

《Two Sum》 结果

可见优化空间还是挺大的

    原文作者:AlwaysBee
    原文地址: https://www.jianshu.com/p/c911d2de0da7
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞