169. 多数元素
分析
- 题目要求找出一个出现次数大于数组长度一半的元素,而且要求o(n)时间,o(1)空间
- 显然一般解法满足不了题目的时间和空间上的要求,需采用妙解,结合题目的n/2,其实可以采用摩尔投票法
- 摩尔投票法
- 选取首元素,初始化票数为1
- 从第二个元素开始遍历元素
- 若相同则票数加1
- 不同则减1,减到0了要重新选举当前元素,并置票数为1
class Solution {
public int majorityElement(int[] nums) {
int ans=nums[0],ticket=1;
for(int i=1;i<nums.length;i++){
if(nums[i]==ans)
ticket++;
else{
if(--ticket==0){
ans=nums[i];
ticket=1;
}
}
}
return ans;
}
}