输入一个整形函数(不含重复数字),然后输入一个任意数字N。如果数组里存在两个整数和为N的数,则返回这两个整数的下标【X,Y】(X为第一个整数下标,Y为第二个整数下标)不存在则返回【-1,-1】
时间: 2024-10-29 18:13:25 浏览: 36
这个问题描述的是一个经典的编程问题,叫做“两数之和”(Two Sum),通常用于评估搜索算法或者哈希表的应用。你需要编写一个函数,给定一个整数数组`nums`和一个目标值`target`,寻找数组中是否存在两个不同的整数,它们的和等于`target`。如果找到这样的数对,函数将返回这两个数的下标作为元组`(X, Y)`;如果没有找到,返回`(-1, -1)`。
在大多数编程语言中,解决这个问题的一个高效方法是使用哈希表,其时间复杂度可以达到O(n)。首先,遍历整个数组,对于每个元素,检查哈希表中是否已经存在目标减去当前元素的值,如果存在,就找到了一对符合条件的数,返回它们的下标。如果没有,就把当前元素及其索引存入哈希表。
下面是Python的示例代码:
```python
def twoSum(nums, target):
hash_map = {}
for i, num in enumerate(nums):
if target - num in hash_map:
return [hash_map[target - num], i]
else:
hash_map[num] = i
return [-1, -1]
```
相关问题
用c++完整 输入一个整形数组 (不含重复数字),然后输入一个任意数字N。如果数组里存在两个整数和为N的数,则返回这两个整数的下标[X, Y] (X为第一个整数下标, Y为第二个整数下标) 不存在则返回[[-1,-1]。
在 C++ 中,你可以通过以下步骤来实现这个功能:
首先,你需要创建一个函数 `find_pairs` 来处理这个问题。这个函数接受一个整型数组和一个目标值 N 作为参数。为了保持时间效率,我们可以使用哈希表(如 `std::unordered_map`),将数组元素及其索引存储起来,以便快速查找。
```cpp
#include <iostream>
#include <vector>
#include <unordered_map>
std::pair<int, int> find_pairs(const 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;
}
return {-1, -1}; // 如果找不到符合条件的数对,返回{-1, -1}
}
int main() {
std::vector<int> nums;
std::cout << "Enter the integers in the array separated by space (no duplicates): ";
// 接收用户输入并保存到 nums 中,这里假设用户输入的是正确的
for (int num; std::cin >> num && num != 0; ) {
nums.push_back(num);
}
int N;
std::cout << "Enter a number N: ";
std::cin >> N;
auto result = find_pairs(nums, N);
if (result.first == -1 && result.second == -1) {
std::cout << "No pair found with sum equal to " << N << "." << std::endl;
} else {
std::cout << "Pair found at indices [" << result.first << ", " << result.second << "]" << std::endl;
}
return 0;
}
```
在这个程序中,用户首先输入一个无重复整数的数组,然后输入一个目标值 N。`find_pairs` 函数遍历数组,对于每个元素,检查是否存在目标值减去它的对应元素在哈希表中的值,如果有,就找到了一对满足条件的数,并返回它们的下标。如果没有找到,最后返回 `-1, -1`。
阅读全文