题目链接:
链接
题目描述:
思路:
摩尔投票法:核心理念为票数正负抵消
- 众数投票+1,否则 -1
- 最后票数和一定>0
- 去掉前面票数和为0的数,剩下的数里面,众数不会变
- 假设某个数是众数,前面的数投票,票数和为0 ,那么剩下的数里面,众数还和原来一样
- 因为,如果假设错误,实际两个都是-1,对众数无影响;如果假设正确,执行的是-1 + 1,那么也只是正常的消除,不会影响结果(根据第3条)
实现代码:
class Solution {public int majorityElement(int[] nums) {int vote = 0, ans = 0;for(int i = 0; i < nums.length ; i++){if(vote == 0) ans = nums[i];vote = vote + (nums[i] == ans ? 1 : -1);}return ans;}
}