作者: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中,以备后面的元素继续判断。
时间复杂度:
空间复杂度: