- 题目
- 给定一个整数数组 nums 和一个整数目标值 target ,在数组中找出和为目标值target的那两个整数,返回两个整数的数组下标
- 测试用例
var nums = [2,7,9,11]
var target = 9
console.log(twoSum(nums,target))
var nums = [3,2,4]
var target = 6
console.log(twoSum(nums,target))
var nums = [3,3]
var target = 6
console.log(twoSum(nums,target))
1. for循环暴力解
- 直接两层for循环暴力解,时间复杂度是
O
(
n
2
)
O(n^{2})
O(n2),最简单最基础的方法
var twoSum = function (nums, target) {
var res = [];
for (let i = 0; i < nums.length - 1; i++) {
for (let j = i + 1; j < nums.length; j++) {
if (nums[i] + nums[j] == target) {
res[0] = i;
res[1] = j;
return res;
}
}
}
};
2. 哈希表-巧用map对象
- 通过使用map对象可以降低到O(n)
- 核心思想为:计算出当前数字和目标数字的差值,检查哈希表是否存在该插值,存在返回结果,不存在则将当前数字作为key,下标索引作为value存入哈希表
var twoSum = function (nums, target) {
let map = new Map();
for (let i = 0, len = nums.length; i < len; i++) {
if (map.has(target - nums[i])) {
return [map.get(target - nums[i]), i];
} else {
map.set(nums[i], i);
}
}
return [];
};