思想:res用于记录当前找到的多数元素,初值为nums[0]
count的值按如下公式计算:
遍历整个数组当:
if(nums[i] == res) count++(i=1…nums.length)
else count–
当count<0时重置res为当前遍历到的数nums[i]并重置count的值为0
当遍历完数组后再去判断一些当前找到的多数元素res是否满足多数元素的定义
class Solution {
public int majorityElement(int[] nums) {
//count用于记录多数元素出现的次数
int count = 1;
//用于记录多数元素
int res = nums[0];
for(int i=1;i<nums.length;i++){
if(nums[i]!=res){
count--;
//如果count<0则令当前数位res并重置count的值为0
if(count<0){
res = nums[i];
count = 0;
}
}else{
count++;
}
}
//再去判断当前res是否满足多数元素的定义
count = 0;
for(int i=0;i<nums.length;i++){
if(nums[i]==res){
count++;
}
}
if(count>nums.length/2){
return res;
}else{
return Integer.MIN_VALUE;
}
}
}