數組中出現次數超過一半的數字

思路:java

使用 cnt 來統計一個元素出現的次數,當遍歷到的元素和統計元素相等時,令 cnt++,不然令 cnt--。若是前面查找了 i 個元素,且 cnt == 0,說明前 i 個元素沒有 majority,或者有 majority,可是出現的次數少於 i / 2 ,由於若是多於 i / 2 的話 cnt 就必定不會爲 0 。此時剩下的 n - i 個元素中,majority 的數目依然多於 (n - i) / 2,所以繼續查找就能找出 majority。code

public int MoreThanHalfNum_Solution(int[] nums) {
    int majority = nums[0];
    for (int i = 1, cnt = 1; i < nums.length; i++) {
        cnt = nums[i] == majority ? cnt + 1 : cnt - 1;
        if (cnt == 0) {
            majority = nums[i];
            cnt = 1;
        }
    }
    int cnt = 0;
    for (int val : nums)
        if (val == majority)
            cnt++;
    return cnt > nums.length / 2 ? majority : 0;
}
相關文章
相關標籤/搜索