两数之和 简单
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
1. 暴力枚举
1.1 思路
通过双层遍历,消耗的时间复杂度为O(n^2),空间复杂度为O(1)。
1.2 代码
js
// 暴力枚举
const twoSum = function (nums, target) {
for(let i = 0; i < nums.length; i++){
for(let j = i + 1;j < nums.length; j++){
if(target - nums[i] === nums[j]){
return [i,j] // 返回下标
}
}
}
console.log("no two sum solution")
}
const nums = [1,2,5,3]
console.log(twoSum(nums, 8)) // 下标: 2 3
1.3 结果
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
2. 散列表
2.1 思路
- 通过散列表,将数组中的值存储起来,然后通过散列表的查找,来判断是否存在目标值。
2.2 代码
js
// 散列表
const twoSum2 = function (nums, target) {
const map = new Map() // 存储循环值
for(let i = 0; i < nums.length; i++){
const complement = target - nums[i]
if(map.has(complement)){
return [map.get(complement), i]
}
map.set(nums[i], i)
}
console.log("no two sum solution")
}
const nums2 = [1,2,5,3]
console.log(twoSum2(nums, 8)) // 下标: 2 3
2.3 结果
- 时间复杂度:O(n)
- 空间复杂度:O(n)