Cho mảng n số nguyên duy nhất. Tìm tổng của 2 số xuất hiện nhiều nhất (có thể nhiều tổng).
Input: {1, 12, 5, 7, 9, 11} Output: 16 12
Giải thích: Tổng 16 (5+11, 7+9) và 12 (1+11, 5+7) đều xuất hiện 2 lần.
Giải pháp: Duyệt mọi cặp, dùng unordered_map đếm tần suất tổng. In các tổng có tần suất max.
Chương trình minh họa
#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 << "Các cặp tổng xuất hiện nhiều nhất:\n";
sumPairs(a, n);
return 0;
}
Kết quả
16 12