题目: 给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例:
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
思路1: 排序找中间的值。
通过上图的分析,我们可以发现不管是数组元素个数是奇数还是偶数,次数大于n/2的元素都会在n/2位置上。所以代码如下:
代码1:
int majorityElement1(vector<int>& nums)
{
sort(nums.begin(),nums.end());
return nums[nums.size()/2];
}
思路2: 保存数组每个元素出现的次数,最后判断出现次数是否大于n/2即可。用哈希和数组都可以。我们用unordered_map<int,int>hash来记录。
代码2:
int majorityElement2(vector<int>& nums)
{
unordered_map<int,int> record;
for(int i=0;i<nums.size();i++)
{
record[nums[i]]++;
if(record[nums[i]]>nums.size()/2)
{
return nums[i];
}
}
return -1;
}
思路3: 投票法:和我一样的加1,不一样的减一,当票数<0则换下一个,最后留下来的就是众数,如下图举例:
代码:
int majorityElement (vector<int>& nums)
{
int cand=nums[0];
int count=1;
for(int i=1;i<nums.size();i++)
{
if(nums[i]==cand)
{
count++;
}
else if(--count<0)
{
cand=nums[i];
count=1;
}
}
return cand;
}
加油哦!🍰。