众数
数组中出现次数最多的数字。
方法一
#include<iostream>
#include<vector>
using namespace std;
vector<int> getMajority(vector<int> nums) {
vector<int> ans;
int num = nums[0]; // 设置 nums[0] 为众数
int maxCount = 0, count = 0; // 最大出现次数,出现次数
for (int i = 0; i < nums.size(); i++) {
if (num == nums[i]) {
count++;
}
else {
count = 1;
num = nums[i]; // 更换众数,重新计数
}
if (count == maxCount) { // 出现次数等于最大记录次数
ans.push_back(num);
}
if (count > maxCount) { // 处理出现次数超过记录次数
maxCount = count;
ans = vector<int>{ num }; // 更新结果序列
}
}
return ans;
}
int main() {
vector<int> nums = { 1, 2, 2, 2, 3, 4, 4, 4 };
nums = getMajority(nums);
cout << "Modes: ";
for (int num:nums) {
cout << num << " ";
}
}
方法二
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> find_mode(const vector<int>& nums) {
unordered_map<int, int> count;
int max_count = 0;
// 统计每个元素的出现次数
for (int num : nums) {
count[num]++;
max_count = max(max_count, count[num]);
}
vector<int> modes;
// 找出所有出现次数与最大次数相同的元素
for (const auto& pair : count) {
if (pair.second == max_count) {
modes.push_back(pair.first);
}
}
return modes;
}
int main() {
vector<int> nums = { 1, 2, 2, 2, 3, 3, 3, 4, 4, 5 };
vector<int> modes = find_mode(nums);
cout << "Modes: ";
for (int mode : modes) {
cout << mode << " ";
}
cout << endl;
return 0;
}