方法想明白就很简单,先读懂题目选出出现次数超过一半的元素,我们这样做,先选取首元素,然后从第二个元素开始遍历数组,若得到的元素与选中元素相同则计数器加一,不同则减一直至为零时,选取当前得到的元素为选中元素,继续往下遍历。如果有超过半数的元素计数器最后会大于等于1,极限 情况就是等于1,数量只超过半数一个,且完全与其他元素’抵消‘掉,其他元素与其他元素之间没发生‘抵消’。
class Solution {
public int majorityElement(int[] nums) {
if(nums == null || nums.length == 0)
return -1;
if(nums.length == 1)
return nums[0];
int t = nums[0];
int cout = 1;//注意不是0
for(int i = 1;i < nums.length;i++){
if(cout == 0){
t = nums[i];
cout = 1;
}
else if(nums[i] == t)
cout++;
else
cout--;
}
cout = 0;
System.out.println(t);
for(int i = 0;i < nums.length;i++)
if(t == nums[i])
cout++;
if(cout > nums.length/2)
return t;
else return -1;
}
}