原题:点击此处
考点:
哈希、排序、摩尔根投票法
思路:
哈希和排序都是很容易想出来的方法。
摩尔根投票法:找出数组中超过一半的数字,如果数组中没有超过一半的数字,找出来的数字不是众数
方法:
- 选一个数作为众数。
- 如果数组中当前遍历的数与他相同,则投票数+1
- 如果不同,投票数-1
- 如果投票数=0,重新选择众数,并开始重新计算
- 最后得到的数字就是超过一半的数
时间复杂度O(n)
空间复杂度O(1)
class Solution {
public int majorityElement(int[] nums) {
int votes = 0;
int curNum = nums[0];
for(int i = 0; i<nums.length; i++){
if(nums[i] == curNum){
votes++;
}else{
votes--;
}
//重新选择超过一半的数
if(votes == 0){
curNum = nums[i+1];
}
}
return curNum;
}
}