1.众数是指数组[n]中出现次数大于n/2的元素
解法:
将数组按顺序重新排列,因为这里众数是出现次数超过一半的数字,所以中位数一定为众数
这里假设数组是非空的,并且总是存在众数
代码:不懂!
class Solution {public:int majorityElement(vector<int>& nums) {sort(nums.begin(),nums.end());return nums[nums.size()/2];}};
2.常见意义上的众数
解法:
1.当数组大小为1,输出arr[0]即可;
2.数组大小为2,如果相等,输出arr[0];反之输出arr[0],arr[1];
3.数组大小大于2时:
1)将数组从小到大排列;
2)将数组去重并统计每个数字出现次数;
3)求出最大的次数;
4)输出最大次数对应的数字(可能不止一个);
代码:不懂!
#include "iostream"#include "stdlib.h"#include <vector>#include <algorithm>using namespace std;/************ 求数组中的众数 *************/vector<int> majorityElement(vector<int> arr) {vector<int> numSet;vector<int> count;vector<int> res;numSet.push_back(arr[0]);count.push_back(1);/*if (arr.size() < 1){res.push_back([]);return;}//return NULL;else */if (arr.size() == 1){res.push_back(arr[0]);return res;}//当数组大小为1时else if (arr.size() == 2){res.push_back(arr[0]);if (arr[0] != arr[1]){res.push_back(arr[1]);}return res;} //当数组大小为2时//当数组大小大于等于三时sort(arr.begin(), arr.end()); //先排序int m = 0;for (int i = 1; i < arr.size(); i++){if (arr[i] != arr[i - 1]) {numSet.push_back(arr[i]);//记录下不重复的值count.push_back(1); //并将次数赋值为1m++;}elsecount[m]++; //当和前值相等时,次数加1}int max = count[0];for (int i = 0; i < count.size(); i++) //求出最大的次数{if (max < count[i])max = count[i];}for (int i = 0; i < count.size(); i++) //输出次数最大的值{if (count[i] == max)res.push_back(numSet[i]);}return res;//cout << arr[i] << ' ';}int main(){vector <int> arr = {12, 2, 5, 6, 21};//{ 1, 2, 2, 2, 4, 6, 6, 8, 11 };vector<int> res;res = majorityElement(arr);for (int i = 0; i < res.size(); i++){cout << res[i] << ' ';}system("pause");return 0;
