Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

พิมพ์ Sum Pairs ทั้งหมดที่เกิดขึ้นมากที่สุดใน C++

ในปัญหานี้ เราจะได้รับ 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