使用 C++ 統計陣列中和值也存在於陣列中的不同對的數量


假設我們有一個整數陣列 arr[],它可以是任意大小,任務是計算給定陣列中不同對的數量,這些對的和也存在於同一個陣列中。

陣列是一種資料結構,可以儲存相同型別元素的固定大小的順序集合。陣列用於儲存資料集合,但通常將陣列視為相同型別變數的集合更有用。

需要記住的要點

  • 無論元素順序如何,一對元素只會被計算一次。例如,(3,2) 和 (2,3) 將被計為 1。

  • 如果陣列中某個數字出現多次,則將被精確地考慮兩次以形成一對。例如,如果陣列的元素為 {2, 2, 2, 2},則對將為 (2,2),並且將被計為 1。

例如

Input − int arr = {6, 4, 10, 14}
Output − count is 2

解釋 - 陣列中和值存在的對為 (6,4) 和 (10,4),所以計數為 2

Input − int arr = {6, 6, 6 ,6, 6, 13}
Output − count is 0

解釋 - 陣列中沒有和值也在陣列中的對。所以,計數為 0。

下面程式中使用的演算法如下

  • 建立一個數組,例如 arr[]

  • 使用 length() 函式計算陣列的長度,該函式將根據陣列中的元素返回一個整數值。

  • 取一個臨時變數來儲存元素的計數。

  • 建立一個 map 型別的變數,例如 mp

  • 開始迴圈,從 i=0 開始,到 i 小於陣列大小結束

  • 建立一個另一個儲存對的 map 型別的變數,例如 par

  • 開始迴圈,從 i=0 開始,到 i 小於陣列大小結束

  • 在迴圈內部,開始另一個迴圈,從 j=i+1 開始,到 j 小於陣列大小結束

  • 在迴圈內部,檢查如果 mp[arr[i]+arr[j]] > 0 並且 pr[{arr[i], arr[j] }] =0,則將計數加 1

  • 將 par[{ arr[i], arr[j] }] 加 1

  • 將 par[{ arr[j], arr[i] }] 加 1

  • 返回計數

  • 列印結果。

示例

 線上演示

#include <iostream>
#include <map>
using namespace std;
// Returns number of pairs in ar[0..n-1] with
// sum equal to 'sum'
int countpairs(int ar[], int n){
   // Store counts of all elements in map m
   // to find pair (ar[i], sum-ar[i])
   // because (ar[i]) + (sum - ar[i]) = sum
   map<int, int> mymap;
   for (int i = 0; i < n; i++){
      mymap[ar[i]]++;
   }
   // To remove duplicate items we use result map
   map<pair<int, int>, int> p;
   int result = 0;
   // Considering all pairs
   for (int i = 0; i < n; i++){
      for (int j = i + 1; j < n; j++){
         // If sum of current pair exists
         if (mymap[ar[i] + ar[j]] > 0 && p[{ ar[i], ar[j] }] ==0){
            result++;
         }
         // Inserting the current pair both ways to avoid
         // duplicates.
         p[{ ar[i], ar[j] }]++;
         p[{ ar[j], ar[i] }]++;
      }
   }
   return result;
}
// main function
int main(){
   int ar[] = { 6, 4, 10, 14 };
   int n = sizeof(ar) / sizeof(ar[0]);
   cout << "count is "<<countpairs(ar, n);
   return 0;
}

輸出

如果我們執行以上程式碼,我們將得到以下輸出:

count is 2

更新於:2020年5月15日

451 次檢視

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告