题目:
Given an array of integers, return indices of the two numbers such that they add up to a specific target.
You may assume that each input would have exactly one solution, and you may not use the same element twice.
示例:
Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7 = 9, return [0, 1].
原题链接:
https://leetcode.com/problems/two-sum/#/description
解法①
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
var result = [];
for (var i = 0; i < nums.length; i++) {
for (var j = i+1; j < nums.length; j++) {
if (nums[i] + nums[j] === target && i !== j) {
result[0] = i;
result[1] = j;
return result;
}
}
}
return result;
};
这种解法比较常规,时间复杂度为O(n²)。通过两个for循环遍历所有元素,当两元素之和等于target,且下标不等时,返回结果。
解法②
/**
* @param {number[]} nums
* @param {number} target
* @return {number[]}
*/
var twoSum = function(nums, target) {
var temp = [];
for (var i = 0; i < nums.length; i++) {
var cur = nums[i];
if (temp[target - cur] !== undefined) {
return [temp[target - cur], i];
}
temp[cur] = i;
}
return [];
};
这种解法相比第一种更高效,时间复杂度为O(n)。将数组值作为temp数组的下标,符合条件则返回结果。