在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

更新于:2021年3月16日

205 次浏览

开启您的职业生涯

通过完成课程获得认证

开始学习
广告
© . All rights reserved.