给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。给出C++代码
时间: 2024-10-11 19:01:22 浏览: 23
这是一个常见的编程问题,通常被称为“两数之和”(Two Sum)。在C++中,可以使用哈希表(unordered_map)来解决这个问题,因为它允许我们快速查找目标值减去当前元素的差值是否存在。以下是简单的C++解决方案:
```cpp
#include <unordered_map>
std::pair<int, int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); ++i) {
int complement = target - nums[i];
if (map.find(complement) != map.end()) {
return {map[complement], i};
}
map[nums[i]] = i; // 将当前元素及其索引存入哈希表
}
throw runtime_error("No solution found!"); // 如果找不到解,抛出异常
}
// 示例
vector<int> nums = {2, 7, 11, 15};
int target = 9;
auto result = twoSum(nums, target);
cout << "Indices of the two numbers are: " << result.first << ", " << result.second << endl;
```
在这个代码里,遍历数组的同时检查目标值与当前元素的差是否已在哈希表中。如果存在,就找到了一对和为目标值的数,直接返回它们的索引;如果没有找到,将当前元素及其索引添加到哈希表中继续搜索。
阅读全文