1.题目
1. 两数之和
给定一个整数数组 nums
和一个整数目标值 target
,请你在该数组中找出 **和为目标值 **target
的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。
示例 1:
**输入:**nums = [2,7,11,15], target = 9
**输出:**[0,1]
**解释:**因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:
**输入:**nums = [3,2,4], target = 6
**输出:**[1,2]
示例 3:
**输入:**nums = [3,3], target = 6
**输出:**[0,1]
2.思路
使用一个哈希表(HashMap)来存储数组元素及其对应的索引。 遍历数组,对于每个元素 nums[i],计算 complement = target - nums[i]。 检查哈希表中是否存在 complement: 如果存在,说明找到了两个元素的和等于 target,返回它们的索引。 如果不存在,将 nums[i] 及其索引 i 存储到哈希表中。
3.代码
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int>hash;
for(int i = 0; i<nums.size();++i){
int x = target-nums[i];
if(hash.count(x))return {i, hash[x]};
else hash[nums[i]] = i;
}
return {-1, -1};
}
};