如何在一个整数数组 nums 中找到两个数,其和等于特定目标值 target,并返回这两个数的下标组成的数组?c++ 只用基础数据类型,不用容器
时间: 2024-12-15 13:18:08 浏览: 5
在C++中,你可以使用哈希表(unordered_map)或者双指针法解决这个问题。这里是一个基于哈希表的基础解法:
```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; // 或者直接使用 map[nums[i]] = nums[i]; 这样可以避免插入重复值,但可能导致下标混乱
}
throw runtime_error("No pair with given sum found"); // 如果找不到符合条件的数对
}
//
相关问题
如何在一个整数数组 nums 中找到两个数,其和等于特定目标值 target,并返回这两个数的下标组成的数组?c++,不用vector
在 C++ 中,你可以使用哈希表(unordered_map)数据结构来解决这个问题,这种方法称为“两数之和”问题。以下是简单的步骤:
1. 遍历输入数组 `nums`,对于每个元素 `num`:
- 检查目标值 `target` 是否存在于哈希表中,通过计算 `target - num`。
- 如果存在,则找到了一对和为目标值的数,返回它们的下标 `[i, j]`,其中 `j` 是哈希表中存储的 `target - num` 对应的键值,注意更新一下哈希表的键值对。
- 如果不存在,将当前元素及其索引 `i` 存入哈希表,键为 `num`,值为 `i`。
以下是代码示例:
```cpp
#include <unordered_map>
std::pair<int, int> twoSum(int* nums, int target, int n) {
std::unordered_map<int, int> map;
for (int i = 0; i < n; ++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() {
int nums[] = {2, 7, 11, 15};
int target = 9;
int n = sizeof(nums) / sizeof(nums[0]);
auto result = twoSum(nums, target, n);
if (result.first != -1 && result.second != -1)
std::cout << "Solution: " << result.first << ", " << result.second << std::endl;
else
std::cout << "No solution" << std::endl;
return 0;
}
```
给定一个整数数组nums和一个整数目标值target,在数组中找出和等于目标值的那两个整数并返回数组下标
给定一个整数数组 `nums` 和一个整数 `target`,这是一个经典的“两数之和”问题,也称为“查找数组中和为目标值的元素”。你需要遍历数组,对于每个元素,检查是否存在另一个不同的元素使得它们的和等于 `target`。如果找到这样的组合,就返回这两个元素的下标,通常采用哈希表(如 Python 的 `dict` 或 Java 的 `HashMap`)来存储已经访问过的元素及其索引,以便于快速查找。
以下是算法的一个简单描述:
1. 创建一个空的哈希表。
2. 遍历数组 `nums`,对于每个元素 `num`:
- 计算 `target - num`,这是我们需要在哈希表中查找的目标值。
- 检查哈希表中是否存在这个差值对应的元素。如果存在,说明找到了一对和为目标值的元素,返回这两个元素的索引。
- 如果不存在,将当前元素的索引添加到哈希表中,键为 `num`,值为当前索引。
3. 如果遍历完整个数组都没有找到合适的一对数,返回空列表或表示未找到的特殊值(取决于编程语言的具体实现)。
阅读全文