Hướng dẫn giải của Tìm pt xuất hiện nhiều nhất
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
// Tìm phần tử xuất hiện nhiều lần nhất
#include <iostream>
#include <unordered_map>
using namespace std;
int main() {
int n;
cin >> n; // Nhập số phần tử
int arr[n];
unordered_map<int, int> freq; // Bản đồ tần suất
for (int i = 0; i < n; i++) {
cin >> arr[i];
freq[arr[i]]++; // Đếm tần suất từng phần tử
}
int max_freq = 0, result = -1;
for (auto &p : freq) {
if (p.second > max_freq) {
max_freq = p.second;
result = p.first; // Cập nhật phần tử xuất hiện nhiều nhất
}
}
cout << result; // In phần tử xuất hiện nhiều nhất
return 0;
}
1. Phần khai báo thư viện
cpp
Sao chép mã
#include <iostream>
#include <unordered_map>
using namespace std;
#include <iostream>: Thư viện cung cấp các hàm nhập xuất (cin, cout).
#include <unordered_map>: Thư viện cung cấp cấu trúc dữ liệu unordered_map, giúp lưu trữ cặp khóa-giá trị (key-value) và hỗ trợ truy cập nhanh (trong trung bình
𝑂
(
1
)
O(1)).
2. Nhập số phần tử của mảng
cpp
Sao chép mã
int n;
cin >> n; // Nhập số phần tử
int arr[n];
int n: Biến lưu số phần tử của mảng.
cin >> n: Nhập số phần tử từ người dùng.
int arr[n]: Khai báo mảng arr có n phần tử.
3. Khởi tạo bản đồ tần suất
cpp
unordered_map<int, int> freq; // Bản đồ tần suất
unordered_map<int, int> freq:
freq là một bản đồ (hash map), nơi:
Khóa (key): Giá trị của phần tử trong mảng.
Giá trị (value): Số lần xuất hiện của phần tử trong mảng.
Ví dụ: Với mảng [3, 1, 3, 2], sau khi cập nhật, freq sẽ là:
yaml
{
3: 2,
1: 1,
2: 1
}
4. Đếm tần suất từng phần tử
cpp
for (int i = 0; i < n; i++) {
cin >> arr[i];
freq[arr[i]]++; // Đếm tần suất từng phần tử
}
for (int i = 0; i < n; i++): Lặp qua từng phần tử trong mảng.
cin >> arr[i]: Nhập từng phần tử của mảng từ người dùng.
freq[arr[i]]++:
Tăng giá trị tần suất của arr[i] trong bản đồ freq.
Nếu arr[i] xuất hiện lần đầu tiên, giá trị của freq[arr[i]] mặc định là 0, sau đó tăng lên 1.
5. Tìm phần tử xuất hiện nhiều lần nhất
cpp
int max_freq = 0, result = -1;
for (auto &p : freq) {
if (p.second > max_freq) {
max_freq = p.second;
result = p.first; // Cập nhật phần tử xuất hiện nhiều nhất
}
}
int max_freq = 0, result = -1:
max_freq: Lưu tần suất lớn nhất tìm được.
result: Lưu phần tử xuất hiện nhiều lần nhất.
for (auto &p : freq):
Lặp qua từng cặp (key, value) trong freq.
p.first: Giá trị phần tử.
p.second: Số lần xuất hiện của phần tử.
if (p.second > max_freq):
Nếu tần suất của phần tử hiện tại (p.second) lớn hơn max_freq, cập nhật:
max_freq = p.second.
result = p.first.
6. In kết quả
cpp
cout << result; // In phần tử xuất hiện nhiều nhất
return 0;
cout << result;: In phần tử xuất hiện nhiều lần nhất.
return 0;: Kết thúc chương trình.
Bình luận