众数的定义
数学中众数的定义: 数组中出现次数最多的数字
在本题中,寻找数组中出现次数超过一半的数字。出现次数超过一半一定是众数。众数定义包含本题的情况,两者是包含的关系。
题目:169. 多数元素 - 力扣(LeetCode)
题解
方法1:hash统计 出现次数超过一半则出现次数一定最多
代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
int ret = 0;
int count = 0;
unordered_map<int, int> hash;
for(auto e : nums)
{
hash[e]++;
if(hash[e] > count)
{
count = hash[e];
ret = e;
}
}
return ret;
}
};
方法2:排序后众数一定处于中间位置(反证法)
代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
sort(nums.begin(), nums.end());
return nums[nums.size() / 2];
}
};
方法3:计数为0更新数据,遍历遇到相同计数+1,遇到不同计数-1
代码:
class Solution {
public:
int majorityElement(vector<int>& nums) {
int count = 0;
int num = 0;
for(int i = 0; i < nums.size(); i++)
{
if(count == 0)
{
num = nums[i];
count++;
}
else
{
if(nums[i] != num) count--;
else count++;
}
}
return num;
}
};