找到一个数组中相加为特定数值的两个元素

作者:lty

时间:2017/7/8 14:39:44

题目:给定一个整数数组,返回两个数字的索引,使它们相加到一个特定的目标。您可以假设每个输入都只有一个解决方案,而您可能不会使用相同的元素两次。
eg:
    Given nums = [2, 7, 11, 15], target = 9,
    Because nums[0] + nums[1] = 2 + 7 = 9,
    return [0, 1]

答:(1)我的做法思路:通过两个循环,让每一个元素和它后面的所有元素相加然后判断是否是特定值。

代码:
        var twoSum = function(nums, target) {
        var lt = nums.length;
        var arr = [];
        for (var i=0;i<lt;i++) {
            for (var y=0;y<lt-i-1;y++) {
                if((nums[i] + nums[i+1+y]) == target) {
                arr[0] = i;
                arr[1] = i+1+y;
                return arr;
                }
            }
        }
        return false;
        };

        console.log(twoSum([2,7,11,15],17));
测试:

时间复杂度:

空间复杂度:
(2)因为觉得我的做法的时间复杂度会高,因为有循环套着一个循环。所以在网上又寻找别人的做法。

代码:
        var twoSum = function(nums,target) {
        var arr = [];
        var exist = [];
        for(var i = 0;i < nums.length;i++) {
           if(typeof(exist[target-nums[i]]) !== 'undefined') {
                arr.push(exist[target-nums[i]]);
                arr.push(i);
            }
            exist[nums[i]] = i;
        }   
        return arr;
        };

测试结果相同。

思路分析:将值变成另一个数组的key,将key变成值。因为每次循环的时候,target-num[i]的值就是要寻找的值,而如果在一个数组中寻找该值,因为不知道该值对应的key,所以没法寻找。如果变成寻找的是key,就只需要判断数组有没有这个key就可以了,所以才会在exist数组中将key和value互换。因为是按顺序判断每个元素的,所以,如果发现exist中没有某个元素,就将其加入到exist中,以备后面的元素继续判断。

时间复杂度:

空间复杂度:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值