leetcode1 Two Sum(JavaScript)

来源:互联网 发布:战争框架steam网络 编辑:程序博客网 时间:2024/06/15 06:27

问题

题目地址:leetcode1
leetcode1

翻译:
给定一个整数数组,找出数组中相加等于你指定数字的两个数。
你可以认为每一个输入有且只有一个结果。
举例:
输入:nums = [2, 7, 11, 15] , target = 9
由 nums[0] + nums1 = 2 + 7 = 9;
输出:[0,1]

2016/2/13更新:
返回数组的指数修改为从0开始。

方法1

最直接的思路,每出现一个值x,直接在数组中寻找是否有等于(target-x)的值。

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

时间复杂度为O(n*n),空间复杂度为O(1)。

方法2

受到类似hash表的启发,把数组的值和序号对应起来处理,此处有参考别人的解答(整理时发现已经在“标答”里)。

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

时间复杂度为O(n),空间复杂度为O(n),牺牲空间换时间。
标答里面给了两种,一种是全部放进去再查找,一种是一边找一边放,这个算是后者。

0 0
原创粉丝点击