给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。用c++
时间: 2024-09-09 11:07:38 浏览: 63
这个问题是在让你编写一个 C++ 函数,用于解决经典的“两数之和”问题。给定一个整数数组 `nums` 和一个目标值 `target`,你需要找到数组中存在且其和等于 `target` 的两个不同的元素的下标。算法通常采用哈希表(如 unordered_map 或 map)来存储遍历过的元素及其索引,以便快速查找是否存在另一个数可以与其相加。
以下是简单的 C++ 解决方案:
```cpp
#include <unordered_map>
std::pair<int, int> twoSum(std::vector<int>& nums, int target) {
std::unordered_map<int, int> hash;
for (size_t i = 0; i < nums.size(); i++) {
int complement = target - nums[i];
if (hash.find(complement) != hash.end()) {
return {hash[complement], i};
}
hash[nums[i]] = i;
}
throw std::runtime_error("No two sum solution");
}
```
在这个函数中,
1. 首先创建一个空的哈希表 `hash`。
2. 对于数组中的每个元素,计算它的补数(即目标值减去当前元素)。
3. 检查补数是否已经在哈希表中,如果找到了,则说明找到了一对符合条件的数,返回它们的下标。
4. 如果找不到,将当前元素及其下标存入哈希表继续查找。
5. 如果遍历完数组都没有找到解决方案,抛出异常。
阅读全文
相关推荐















