Computer >> Máy Tính >  >> Lập trình >> C ++

Đếm các cặp từ hai mảng có tổng bằng K trong C ++

Chúng ta được cho hai mảng Arr1 [] và Arr2 [] và một số K. Mục đích là tìm các cặp phần tử duy nhất của cả hai mảng sao cho tổng của chúng là K. Các cặp sẽ có dạng (Arr1 [i], Arr2 [j ]) trong đó Arr1 [i] + Arr2 [j] ==K.

Chúng tôi sẽ duyệt qua bằng cách sử dụng hai vòng lặp cho i và j. Nếu sum (Arr1 [i] + Arr2 [j]) ==K. Và cặp này không tồn tại trong unrdered_map . Thêm nó vào bản đồ và số lượng gia tăng.

Hãy cùng hiểu với các ví dụ.

Đầu vào

Arr1[]={ 1,3,2,4,3,2 }; Arr2[]={ 0,2,1,2,3 }; K=4

Đầu ra

Number of pairs with sum K : 4

Giải thích

Pairs will be
( Arr1[0], Arr2[4] ) → (1,3)
( Arr1[1], Arr2[2] ) → (3,1)
( Arr1[2], Arr2[1] ) → (2,2)
( Arr1[3], Arr2[2] ) → (3,1)
All other pairs already exist.Total unique pairs 4.

Đầu vào

Arr1[]={ 0,2,1,2,3}; Arr2[]={ 1,1,1,1,1 }; K=3

Đầu ra

Number of pairs with sum K : 1

Giải thích

Pairs will be
( Arr1[1], Arr2[0] ) → (2,1)
All other pairs already exist.Total unique pairs 1.

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Chúng tôi lấy hai mảng Arr1 [] và Arr2 [] và một biến K cho tổng.

  • Len1 và Len2 được sử dụng để biểu thị độ dài của cả hai mảng.

  • Hàm pairumisK (int arr1 [], int arr2 [], int k, int l1, int l2) nhận tất cả các biến và trả về số lượng các cặp phần tử duy nhất từ ​​cả hai mảng với sum =k.

  • Lấy số lượng biến ban đầu là 0 cho các cặp.

  • Sử dụng umap unardered_map để lưu trữ các cặp duy nhất.

  • Duyệt qua cả hai mảng bằng cách sử dụng hai vòng lặp for.

  • Đối với các phần tử trong arr1 [] từ i =0 đến i

  • Kiểm tra xem sum arr1 [i] + arr2 [j] =k. Nếu có, hãy kiểm tra xem cặp này có tồn tại hay không thông qua umap.find (....) ==umap.end ().

  • Nếu nó không thêm cặp này vào umap và số lượng gia tăng.

  • Ở cuối tất cả các vòng đếm sẽ có tổng số các cặp như vậy.

  • Trả về kết quả là số lượng.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
int pairsumisK(int arr1[],int arr2[],int k,int l1,int l2){
   int count = 0;
   unordered_map<int, int> umap;
   for (int i = 0; i < l1; i++){
      for (int j = 0; j < l2; j++){
         int sum=arr1[i]+arr2[j];
         if(sum==k) //pairs with sum=k only{
            if(umap.find(arr1[i]) == umap.end()) //unique pairs only{
               umap.insert(make_pair(arr1[i],arr2[j]));
            }
         }
      }
   }
   return count;
}
int main(){
   int Arr1[]={ 1,2,3,0,2,4 };
   int Arr2[]={ 3,2,5,2 };
   int len1=sizeof(Arr1)/sizeof(Arr1[0]);
   int len2=sizeof(Arr2)/sizeof(Arr2[0]);
   int K=5; //length of array
   cout <<endl<< "Number of pairs with sum K : "<<pairsumisK(Arr1,Arr2,K,len1,len2);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, nó sẽ tạo ra kết quả sau -

Number of pairs with sum K : 0