两数之和
题目及解法分析
- 解法
- 双循环 O(n ^ 2)
- 一次循环 + map O(n)
图解分析

js实现
<script>
var twoSum = function(nums, target) {
if(nums.length < 2) {
return []
}
for(let i = 0; i < nums.length - 1; i++) {
for(let j = i + 1; j < nums.length; j++) {
if(nums[i] + nums[j] == target) {
return [i, j]
}
}
}
return []
}
var twoSum = function(nums, target) {
if(nums.length < 2) {
return []
}
let mapNew = new Map()
let complete
for(let i = 0; i < nums.length; i++) {
complete = target - nums[i]
if(mapNew.has(complete)) {
return [mapNew.get(complete), i]
}
mapNew.set(nums[i], i)
}
};
console.log(twoSum([2, 7, 11, 15], 9))
</script>
总结
/**
* 1. 暴力两重循环 注意 j = i + 1
*
* 2. 一层循环 + map
* 如果 map 中,没有 9 - 2 = 7 的 7 那么把 2 和 2 的下标放进 map 中
* 如果有,返回 map 中 7 的下标,以及 2 的下标
*/