在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.