ในปัญหานี้ เราได้รับอาร์เรย์ของจำนวนเต็มที่ไม่ซ้ำกัน n ตัว และเราต้องหาผลรวมของจำนวนเต็มสองตัวของอาร์เรย์ที่มีความถี่สูงสุด ปัญหามีหลายวิธี และคุณจำเป็นต้องค้นหาทั้งหมด
Input : array = { 1, 12, 5, 7, 9, 11} Output : 16 12
คำอธิบาย − ผลรวม 16 และ 12 เกิดขึ้นสองครั้ง
5 + 11 = 16 & 7 + 9 = 16 1 + 11 = 12 & 5 + 7 = 12
เพื่อแก้ปัญหานี้ แนวทางของเราในการแก้ปัญหาคือการตรวจสอบการเกิดขึ้นของคู่ผลรวมทุกคู่ จากนั้นพิมพ์คู่ด้วยจำนวนครั้งสูงสุด
ขั้นตอนในการแก้ปัญหา −
Step 1: Iterate over all pairs. Step 2: The occurrence of sum pairs is counted using hash-table. Step 3: After the interation process is done, the sum pair with maximum occurrence is printed.
ตัวอย่าง
#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 ccurence are : "<<endl; sumPairs(a, n); return 0; }
ผลลัพธ์
คู่ผลรวมที่เกิดขึ้นสูงสุดคือ -
16 12