- 多数元素
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
神仙解法
class Solution {
public int majorityElement(int[] nums) {
int ans=nums[0];
int len=1;
for(int num:nums){
if(num == ans){
len++;
}
/*else{
//不等,碰撞
if(len>1){
len--;
}
else{
ans=num;
len=1;
}
}*/
//注释代码与下列函数实现同样的方法,下面的函数更精炼
else if(--len==0){
ans=num;
len=1;
}
}
return ans;
}
}
思路:不相等的相互碰撞消融,留下的就是最多的,因为众数的数量大于n/2。
才发现,摩尔投票法和碰撞相融一个意思
碰撞相融:不同就碰撞掉,剩下的就是众数
摩尔投票法:假设第一个数为candidate,票数为1,往后遍历,若与candidate相同,则支持ta,票数+1,不相同则不支持票数-1,减为0时,换下一数为candidate。