两数之和
算法简单哈希表约 303 字大约 1 分钟
题目描述
给定一个整数数组 nums 和一个整数目标值 target,请在该数组中找出和为目标值 target 的两个整数,并返回它们的数组下标。
注意事项
- 每种输入只会对应一个答案
- 不能使用两次相同的元素
- 答案可返回任意顺序
示例
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
输入:nums = [3,2,4], target = 6
输出:[1,2]
输入:nums = [3,3], target = 6
输出:[0,1]提示
2 <= nums.length <= 104
-109 <= nums[i] <= 109
-109 <= target <= 109
只会存在一个有效答案
解题思路
1.暴力解法
实现代码
function twoSum(nums: number[], target: number): number[] {
for (let i = 0; i < nums.length; i++) {
for (let j = i+1; j < nums.length; j++) {
if (nums[i] + nums[j] === target) {
return [i, j];
}
}
}
return [];
}复杂度分析
- ⏰ 时间复杂度:O(N²)
- 💾 空间复杂度:O(1)
2.哈希表解法
实现代码
function twoSum(nums: number[], target: number): number[] {
const numMap: Record<number, number> = {};
for (let i = 0; i < nums.length; i++) {
const complement = target - nums[i];
if (complement in numMap) {
return [numMap[complement], i];
}
numMap[nums[i]] = i;
}
return [];
}复杂度分析
- ⏰ 时间复杂度:O(N)
- 💾 空间复杂度:O(N)
提交记录
https://leetcode.cn/problems/two-sum/submissions/620325805