用 C++ 打印具有给定和的所有对


在这个问题中,我们得到一个整数数组和一个整数和,我们必须打印所有整数对,其和等于和值。

让我们举一个例子来理解这个问题

输入 - 数组 = {1, 6, -2, 3} 和 = 4

输出 - (1, 3) , (6, -2)

在这里,我们需要具有给定和值的数对。

该问题的一个简单解决方案是检查生成和的元素对。这可以通过遍历数组并在数组中找到加起来等于和值的数字来完成。

示例

此程序将说明解决方案 -

 在线演示

#include <iostream>
using namespace std;
int printPairsWithSum(int arr[], int n, int sum){
   int count = 0;
   for (int i = 0; i < n; i++)
      for (int j = i + 1; j < n; j++)
         if (arr[i] + arr[j] == sum)
            cout<<"[ "<<arr[i]<<", "<<arr[j]<<" ]\n";
}
int main(){
   int arr[] = {1, 6, -2, 3};
   int n = 4;
   int sum = 4;
   cout<<"Pairs with Sum "<<sum<<" are :\n";
   printPairsWithSum(arr, n, sum);
   return 0;
}

输出

Pairs with Sum 4 are :
[ 1, 3 ]
[ 6, -2 ]

这种方法易于理解,但效率不高。另一种方法是使用哈希。

我们将初始化一个哈希表并遍历数组并在其中查找对。匹配时,我们将打印数组

示例

以下程序将帮助您更好地理解该算法 -

 在线演示

#include <bits/stdc++.h>
using namespace std;
void printPairsWithSum(int arr[], int n, int sum){
   unordered_map<int, int> pair;
   for (int i = 0; i < n; i++) {
      int rem = sum - arr[i];
      if (pair.find(rem) != pair.end()) {
         int count = pair[rem];
         for (int j = 0; j < count; j++)
         cout<<"["<<rem<<", "<<arr[i]<<" ]\n";
      }
      pair[arr[i]]++;
   }
}
int main(){
   int arr[] = {1, 6, -2, 3};
   int n = 4;
   int sum = 4;
   cout<<"The pair with sum is \n";
   printPairsWithSum(arr, n, sum);
   return 0;
}

输出

Pairs with Sum 4 are :
[ 1, 3 ]
[ 6, -2 ]

更新于: 2020年7月14日

365 次浏览

开启你的职业生涯

通过完成课程获得认证

开始学习
广告