解法1:摩尔投票法:
核心就是对拼消耗(一对一抵消,剩下的就是winner)。从用n来记录数字(初始为第一个数字),count来记录票数(初始为一票,第一个数字的一票)。从第二个数字开始遍历,如果跟第一个数相同票数就加一,不同票数就减一。当num=0时,将前面所有的票数置为0,从下标为i+1的数开始
class Solution {
public int majorityElement(int[] nums) {
int count=1; //count来记录票数(初始为一票,第一个数字的一票)
int n =nums[0]; //用n来记录数字(初始为第一个数字)
//从第二个数字开始遍历,如果跟第一个数相同票数就加一,不同票数就减一。
for(int i=1;i<nums.length;i++){
if(n==nums[i]){
count++;
}else{
count--;
//当count=0时,将前面所有的票数置为0,从下标为i+1的数开始
if (count==0)
n=nums[i+1];
}
}
return n;
}
}