摩尔投票法:寻找超越一半的数字

  • 假设arr[0]是超越一半的数,遍历集合:
    • 若遍历元素和arr[0]相同,则count + 1;
    • 若遍历元素和arr[0]不同,则count - 1;
  • 如果计数为0,说明前面的数字被抵消,数量超越一般的数组在后面。
import java.util.*;
public class Solution {
    public int MoreThanHalfNum_Solution(int [] array) {
        int x = array[0], count = 0;
        for(int num : array){
            if(count == 0) x = num;
            count += num == x ? 1 : -1;
        }
        return x;
    }
}

排序取中:
若某数的数量超过一半,则有序数列的中点就是该数。

import java.util.*;
public class Solution {
     public int MoreThanHalfNum_Solution(int [] array) {
         Arrays.sort(array);
         return array[array.length / 2];
    }
}