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