使用c语言给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。 你可以按任意顺序返回答案。
时间: 2024-10-12 19:03:45 浏览: 40
c代码-1. 两数之和 [简单] https://leetcode-cn.com/problems/two-sum
这是一个经典的“两数之和”问题,在C语言中可以使用哈希表(也称为关联数组或字典)来解决。以下是基本的算法步骤:
1. 创建一个空的哈希表 `unordered_map<int, int>` 或者使用 C++ 内置的 `std::unordered_map` 来存储数组元素及其索引。
2. 遍历整个数组 `nums`:
- 对于每个元素 `num`:
- 如果目标值 `target` 减去 `num` 已经存在于哈希表中,说明找到了一对和为目标值的整数,直接返回这两个元素的索引,因为它们已经满足条件(第一个元素的索引在前,第二个元素的索引在后)。
- 否则,将当前元素的索引添加到哈希表中,键是元素值,值是元素的索引。
3. 如果遍历完整个数组都没有找到匹配的和,返回一个表示不存在这样的两个数的标记(例如 `-1` 或者 `nullptr`)。
以下是简单的C++代码实现:
```cpp
#include <unordered_map>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); ++i) {
if (map.find(target - nums[i]) != map.end()) {
return {map[target - nums[i]], i};
}
map[nums[i]] = i;
}
return {-1}; // 返回一个默认的无解标识
}
```
阅读全文