ภาพรวมปัญหา
ได้รับ Unsorted Array ต้องพิมพ์คู่ทั้งหมดที่มีผลรวมเท่ากัน
ตัวอย่าง
Input: [12, 13, 20, 5] Output: [12, 13] and [20, 5] have sum 25
วิธีแก้ปัญหา (Two Maps)
- Map1: Key = Pair, Value = Sum
- Map2: Key = Sum, Value = Vector of Pairs
- ลูปหาคู่ทั้งหมด เก็บใน Map2
- พิมพ์ Sum ที่มีคู่มากกว่า 1 คู่
ตัวอย่างโค้ด C++
#include <bits/stdc++.h>
using namespace std;
void findEqualSumPairs(int A[], int n) {
map<int, vector<pair<int, int>> > map1;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
pair<int, int> p = make_pair(A[i], A[j]);
map1[A[i] + A[j]].push_back(p);
}
}
for (auto value = map1.begin(); value != map1.end(); value++) {
if (value->second.size() > 1) {
for (int i = 0; i < value->second.size(); i++) {
cout << "[ " << value->second[i].first << ", " << value->second[i].second << "] ";
}
cout << "have sum: " << value->first << endl;
}
}
}
int main() {
int A[] = { 6, 4, 12, 10, 22, 11, 8, 2 };
int n = sizeof(A) / sizeof(A[0]);
cout << "Pairs with same sum are:\n";
findEqualSumPairs(A, n);
return 0;
}
ผลลัพธ์ (Output)
Pairs with same sum are: [ 6, 4] [ 8, 2] have sum: 10 [ 4, 8] [ 10, 2] have sum: 12 [ 6, 8] [ 4, 10] [ 12, 2] have sum: 14 [ 6, 10] [ 4, 12] have sum: 16 [ 6, 12] [ 10, 8] have sum: 18