public int majorityElement(int[] nums) {
int candidate = nums[0], count = 0;
for(int i = 1; i < nums.length; i++){
if(candidate == nums[i]){
count++;
} else{
if(count != 0){
count--;
} else {
candidate = nums[i];
}
}
}
return candidate;
}
http://www.programcreek.com/2014/02/leetcode-majority-element-java/
public List<Integer> majorityElement(int[] nums) {
List<Integer> res = new ArrayList<Integer>();
if(nums.length == 0) return res;
int count1 = 1, count2 = 0, candidate1 = nums[0], candidate2 = 0;
for(int i = 1; i < nums.length; i++){
if(nums[i] == candidate1){
count1++;
} else if(nums[i] == candidate2){
count2++;
} else{
if(count1 != 0 && count2 != 0){
count1--;
count2--;
// 如果某个计数器为0,则更新相应的候选数
} else if(count1 == 0) {
candidate1 = nums[i];
count1 = 1;
} else if(count2 == 0) {
candidate2 = nums[i];
count2 = 1;
}
}
}
count1 = 0;
count2 = 0;
for(int i = 0; i < nums.length; i++){
if(nums[i] == candidate1) count1++;
else if(nums[i] == candidate2) count2++;
}
if(count1 > nums.length / 3) res.add(candidate1);
if(count2 > nums.length / 3) res.add(candidate2);
return res;
}
refer: https://segmentfault.com/a/1190000003740925