โจทย์
เราได้รับอาร์เรย์และต้องหาองค์ประกอบที่พบบ่อยที่สุดจากมัน มาดูตัวอย่างกัน
อินพุต
arr = [1, 2, 3, 3, 2, 2, 1, 1, 2, 3, 4]
เอาต์พุต
2
ในอาร์เรย์ข้างต้น 2 ปรากฏ 4 ครั้ง ซึ่งมากที่สุดในอาร์เรย์
อัลกอริธึม - 1
- กำหนดอาร์เรย์
- กำหนดแมป (map) เพื่อเก็บความถี่ของแต่ละองค์ประกอบ
- นับความถี่ของแต่ละองค์ประกอบและเก็บในแมป
- วนลูปผ่านแมปและหาองค์ประกอบที่มีความถี่มากที่สุด
- คืนค่าองค์ประกอบนั้น
อัลกอริธึม - 2
- กำหนดอาร์เรย์
- เรียงลำดับอาร์เรย์ที่กำหนด
- รักษาตัวแปรสำหรับจำนวนสูงสุด ผลลัพธ์ และจำนวนปัจจุบันขององค์ประกอบ
- หาองค์ประกอบที่มีจำนวนสูงสุดโดยวนลูปผ่านอาร์เรย์
- องค์ประกอบเดียวกันจะอยู่ติดกัน
- คืนค่าผลลัพธ์
การนำไปใช้งาน
ต่อไปนี้เป็นการนำไปใช้งานของอัลกอริธึมข้างต้นใน C++
#include <bits/stdc++.h>
using namespace std;
int getMostFrequentNumber(int arr[], int n) {
unordered_map<int, int> elements;
for (int i = 0; i < n; i++) {
elements[arr[i]]++;
}
int maxCount = 0, res = -1;
for (auto i : elements) {
if (maxCount < i.second) {
res = i.first;
maxCount = i.second;
}
}
return res;
}
int main() {
int arr[] = { 1, 2, 3, 3, 2, 2, 1, 1, 2, 3, 4 };
int n = 11;
cout << getMostFrequentNumber(arr, n) << endl;
return 0;
}
ผลลัพธ์
หากคุณรันโค้ดข้างต้น คุณจะได้ผลลัพธ์ดังนี้
2