3005. Đếm Số Phần Tử Có Tần Suất Tối Đa
Độ khó: Dễ
Chủ đề: Mảng, Bảng băm, Đếm, Cuộc thi hàng tuần 380
Bạn được cung cấp một mảng nums bao gồm các số nguyên dương.
Trả về tổng tần suất của các phần tử trong nums sao cho những phần tử đó đều có tần suất tối đa.
Ví dụ
Ví dụ 1:
- Đầu vào: nums = [1, 2, 2, 3, 1, 4]
- Đầu ra: 4
- Giải thích: Các phần tử 1 và 2 có tần suất 2, đây là tần suất tối đa trong mảng.
- Vậy số lượng phần tử trong mảng có tần suất tối đa là 4.
Ví dụ 2:
- Đầu vào: nums = [1, 2, 3, 4, 5]
- Đầu ra: 5
- Giải thích: Tất cả các phần tử trong mảng đều có tần suất 1, đây là tần suất tối đa.
- Vậy số lượng phần tử trong mảng có tần suất tối đa là 5.
Ràng buộc
1 <= nums.length <= 1001 <= nums[i] <= 100
Mẹo
- Tìm tần suất của tất cả các phần tử trong mảng.
- Tìm các phần tử có tần suất tối đa và đếm tổng số lần xuất hiện của chúng.
Giải pháp
Chúng ta cần xác định tổng tần suất của các phần tử trong một mảng có tần suất tối đa. Tần suất của một phần tử là số lần nó xuất hiện trong mảng. Giải pháp bao gồm việc đếm số lần xuất hiện của mỗi phần tử, xác định tần suất tối đa và sau đó tính tổng tần suất của tất cả các phần tử có tần suất tối đa này.
Cách tiếp cận
- Đếm tần suất: Sử dụng bảng băm (hoặc một mảng) để đếm số lần mỗi phần tử xuất hiện trong mảng đầu vào.
- Tìm tần suất tối đa: Xác định giá trị tần suất cao nhất từ các giá trị tần suất đã đếm.
- Tính tổng tần suất của các phần tử tối đa: Đối với mỗi phần tử có tần suất bằng tần suất tối đa, cộng tần suất của nó vào kết quả. Hoặc, nhân tần suất tối đa với số lượng phần tử có tần suất tối đa này.
Triển khai giải pháp bằng PHP
php
<?php
/**
* @param Integer[] $nums
* @return Integer
*/
function maxFrequencyElements($nums) {
$frequency = array_count_values($nums);
$maxFreq = max($frequency);
$totalCount = 0;
foreach ($frequency as $count) {
if ($count === $maxFreq) {
$totalCount += $count;
}
}
return $totalCount;
}
// Kiểm tra các trường hợp
// Ví dụ 1
$nums1 = array(1, 2, 2, 3, 1, 4);
echo maxFrequencyElements($nums1) . "\n"; // Đầu ra: 4
// Ví dụ 2
$nums2 = array(1, 2, 3, 4, 5);
echo maxFrequencyElements($nums2) . "\n"; // Đầu ra: 5
?>
Giải thích:
- Đếm tần suất: Hàm
array_count_valuesđược sử dụng để tạo một mảng liên kết trong đó các khóa là các phần tử từ$numsvà các giá trị là tần suất tương ứng của chúng. - Tìm tần suất tối đa: Hàm
maxđược áp dụng cho các giá trị của mảng tần suất để tìm tần suất cao nhất. - Đếm các phần tử có tần suất tối đa: Chúng ta lặp qua mảng tần suất và đếm có bao nhiêu phần tử có tần suất bằng tần suất tối đa.
- Tính toán kết quả: Kết quả được thu được bằng cách nhân tần suất tối đa với số lượng phần tử có tần suất tối đa. Điều này cho tổng số lần xuất hiện của tất cả các phần tử có tần suất tối đa.
Thực hành tốt nhất
- Sử dụng các cấu trúc dữ liệu phù hợp như bảng băm để tối ưu hóa hiệu suất.
- Đảm bảo kiểm tra các trường hợp biên, ví dụ như khi mảng chỉ có một phần tử.
Những cạm bẫy thường gặp
- Quên xử lý các trường hợp mà tất cả các phần tử đều có tần suất khác nhau.
- Không kiểm tra trường hợp mảng rỗng hoặc chỉ có một phần tử.
Mẹo hiệu suất
- Sử dụng các hàm tích hợp như
array_count_valuessẽ giúp tiết kiệm thời gian phát triển và tối ưu hóa hiệu suất.
Câu hỏi thường gặp (FAQ)
Q: Hàm này có thể hoạt động với các số âm không?
A: Không, hàm này chỉ hoạt động với các số nguyên dương như được yêu cầu trong bài toán.
Q: Có cách nào khác để giải quyết bài toán này không?
A: Có thể sử dụng các phương pháp khác như sắp xếp mảng trước khi đếm, nhưng sẽ kém hiệu quả hơn so với phương pháp đã nêu.
Kết luận
Giải pháp này tính toán nhanh chóng và hiệu quả tổng tần suất của các phần tử có tần suất tối đa trong mảng. Đây là một bài toán cơ bản nhưng rất hữu ích để rèn luyện kỹ năng lập trình và tư duy thuật toán của bạn. Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ với bạn bè hoặc theo dõi tôi để nhận thêm nhiều nội dung hỗ trợ khác nhé!
- Theo dõi tôi trên LinkedIn
- Xem thêm trên GitHub