在C++中查找数组中和已存在的数对
在这个问题中,我们给定一个包含N个整数的数组arr[]。我们的任务是在数组中找到那些和已经存在于数组中的数对。我们需要找到和等于数组中某个值的数对。
让我们来看一个例子来理解这个问题:
输入
arr[] = {1, 2, 4, 6, 7}输出
(1, 6), (2, 4)
解释
对于数对(1, 6),值的和是7,它存在于数组中。
对于数对(2, 4),值的和是6,它存在于数组中。
解决方案
解决这个问题的一个简单方法是使用数组的元素找到所有可能的数对。然后计算数对值的和。在数组中搜索这个和值,如果存在则打印。
此外,我们将有一个用于计数数对数量的计数器。如果它是0,我们将打印没有找到数对。
程序演示了我们解决方案的工作原理:
示例
#include <iostream>
using namespace std;
void findSumPairsArr(int arr[], int n){
int pairCount = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
for (int k = 0; k < n; k++) {
if (arr[i] + arr[j] == arr[k]) {
cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum = "<<(arr[i] + arr[j])<<"\n";
pairCount++;
}
}
}
}
if (!pairCount)
cout<<"No Such Pairs found !";
}
int main() {
int arr[] = { 1, 2, 4, 6, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Pairs in array whose sum already exists in array : \n";
findSumPairsArr(arr, n);
return 0;
}输出
数组中和已存在的数对 -
( 1, 6 ), sum = 7 ( 2, 4 ), sum = 6
另一种更有效的方法是使用哈希表来解决这个问题。我们将检查所有的数对,然后计算它们的和,并检查它是否存在于数组中,并跟踪它。如果pairCount为0,则打印“没有找到这样的数对!”。
在这里,C++中的哈希表实现使用的是`unordered_set`。
程序演示了我们解决方案的工作原理:
示例
#include <bits/stdc++.h>
using namespace std;
void findSumPairsArr(int arr[], int n) {
unordered_set<int> HT;
for (int i = 0; i < n; i++)
HT.insert(arr[i]);
int pairCount = 0;
for (int i = 0; i < n; i++) {
for (int j = i + 1; j < n; j++) {
if (HT.find(arr[i] + arr[j]) != HT.end()) {
cout<<"( "<<arr[i]<<", "<<arr[j]<<" ), sum =
"<<(arr[i] + arr[j])<<"\n";
pairCount ++;
}
}
}
if (!pairCount)
cout<<"No Such Pairs found !";
}
int main() {
int arr[] = {1, 2, 4, 6, 7 };
int n = sizeof(arr) / sizeof(arr[0]);
cout<<"Pairs in array whose sum already exists in array : \n";
findSumPairsArr(arr, n);
return 0;
}输出
数组中和已存在的数对 -
( 1, 6 ), sum = 7 ( 2, 4 ), sum = 6
广告
数据结构
网络
关系数据库管理系统 (RDBMS)
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP