ในปัญหานี้ เราจะได้รับ array ของ n จำนวนเต็มที่ไม่ซ้ำกัน และต้องหาผลรวมของจำนวนเต็ม 2 ตัวของ array ที่มีความถี่สูงสุด ปัญหานี้มีหลายคำตอบและต้องหาทั้งหมด
Input: array = {1, 12, 5, 7, 9, 11}
Output: 16 12
คำอธิบาย - ผลรวม 16 และ 12 เกิดขึ้น 2 ครั้ง
5 + 11 = 16 & 7 + 9 = 16 1 + 11 = 12 & 5 + 7 = 12
ตอนนี้เพื่อแก้ปัญหานี้ วิธีการของเราคือตรวจสอบการเกิดของทุก sum pair แล้วพิมพ์ pair ที่มีจำนวนครั้งมากที่สุด
ขั้นตอนการแก้ปัญหา
ขั้นตอนที่ 1: วนลูปทุก pairs ขั้นตอนที่ 2: นับการเกิดของ sum pairs โดยใช้ hash-table ขั้นตอนที่ 3: หลังจบการวนลูป ให้พิมพ์ sum pair ที่มีการเกิดมากที่สุด
โปรแกรมตัวอย่าง
#include <bits/stdc++.h>
using namespace std;
void sumPairs(int a[], int n) {
unordered_map<int, int> pairSum;
for (int i = 0; i < n - 1; i++) {
for (int j = i + 1; j < n; j++) {
pairSum[a[i] + a[j]]++;
}
}
int occur = 0;
for (auto it : pairSum) {
if (it.second > occur) {
occur = it.second;
}
}
for (auto it : pairSum) {
if (it.second == occur)
cout << it.first << "\t";
}
}
int main() {
int a[] = {1, 12, 5, 7, 9, 11};
int n = sizeof(a) / sizeof(a[0]);
cout << "The sum pairs with max occurrence are : " << endl;
sumPairs(a, n);
return 0;
}
ผลลัพธ์
The sum pairs with max occurrence are -
16 12