给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。用c语言写出来
时间: 2024-10-11 13:01:05 浏览: 25
这是一个经典的算法题,通常被称为“两数之和”,可以使用哈希表(unordered_map 或者 C++ 的 std::unordered_set)来解决。以下是使用 C++ 编写的解决方案:
```cpp
#include <vector>
#include <unordered_map>
std::pair<int, int> twoSum(std::vector<int>& nums, int target) {
std::unordered_map<int, int> map;
for (size_t i = 0; i < nums.size(); i++) {
if (map.find(target - nums[i]) != map.end()) {
return {map[target - nums[i]], i};
}
map[nums[i]] = i; // 添加当前元素及其索引到哈希表中
}
throw std::runtime_error("No solution found"); // 如果找不到解,抛出异常
}
// 示例
int main() {
std::vector<int> nums = {2, 7, 11, 15};
int target = 9;
auto result = twoSum(nums, target);
std::cout << "Indices of the two numbers that add up to " << target << ": (" << result.first << ", " << result.second << ")\n";
return 0;
}
```
这个函数会遍历数组,对于每个元素,它检查是否存在另一个元素使得两者相加等于目标值。如果找到匹配的元素,就直接返回这两个元素的索引。如果没有找到,最后会抛出一个错误,表示找不到满足条件的两个数。
阅读全文