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

来源:互联网 发布:网络负面新闻消除方案 编辑:程序博客网 时间:2024/05/21 14:56

作者: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 0