方法一、暴力做法 O(n^2)
var twoSum = function(nums, target) {
let res = [];
for (let i = 0; i < nums.length; i ++) {
for (let j = i + 1; j < nums.length; j ++) {
if (nums[i] + nums[j] == target) {
res.push(i,j);
}
}
}
return res;
};
方法二:
循环遍历数组nums
,在每一次循环中做以下两件事
- 判断
target - nums[i]
是不是在哈希表中 - 将
nums[i]
插入哈希表中
题目保证有且只有一组解 只用扫描一遍,并且哈希表的插入和删除操作复杂度是O(1)
所以时间复杂度为O(n)
var twoSum = function(nums, target) {
let map = new Map();
for (let i = 0; i < nums.length; i ++) {
let n2 = target - nums[i];
if (map.has(n2)) {
return [map.get(n2),i];
} else {
map.set(nums[i],i);
}
}
return 0;
};