设计算法,找出数组中相加之和为目标值的两个数,并输出这两个数的下标。每组输入仅对应一种答案,相同的元素不能被重复利用。 编程要求 输入 多组数据,每组数据有三行,第一行为数组的大小n,第二行为n个元素(元素之间用空格分隔),第三行为目标值,当n=0时输入结束。 输出 对于每组数据分别输出一样,输出两个数的下标(元素间用空格分隔)。用c++写出代码
时间: 2023-06-15 13:06:51 浏览: 619
js代码-1. 两数之和 [简单] https://leetcode-cn.com/problems/two-sum
以下是C++代码实现:
```c++
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
vector<int> result;
unordered_map<int, int> map;
for (int i = 0; i < nums.size(); i++) {
int complement = target - nums[i];
if (map.count(complement)) {
result.push_back(map[complement]);
result.push_back(i);
return result;
}
map[nums[i]] = i;
}
return result;
}
int main() {
int n;
while (cin >> n && n) {
vector<int> nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
int target;
cin >> target;
vector<int> result = twoSum(nums, target);
cout << result[0] << " " << result[1] << endl;
}
return 0;
}
```
对于每组数据,我们首先读入数组的大小n,然后读入n个元素构成数组nums,最后读入目标值target。接着调用twoSum函数找出相加之和为目标值的两个数,并输出它们的下标。在twoSum函数中,我们使用哈希表(unordered_map)来记录每个元素的下标,以便快速查找相加之和为目标值的两个数。如果找到了这样的两个数,就将它们的下标添加到结果数组中并返回。如果遍历完整个数组仍然没有找到这样的两个数,则返回空数组。
阅读全文