算法 |《劍指offer》面試題39.數組中出現次數超過一半的數字

數組中有一個數字出現的次數超過數組長度的一半,請找出這個數字。

你可以假設數組是非空的,並且給定的數組總是存在多數元素。

示例 1:

輸入: [1, 2, 3, 2, 2, 2, 5, 4, 2]
輸出: 2

限制:

1 <= 數組長度 <= 50000

題解:
class Solution {
    public int majorityElement(int[] nums) {
        //需要的數字出現次數多於一半,那麼排序後這個數字必定位於中間,複雜度爲O(nlogn)
        // Arrays.sort(nums);
        // return nums[nums.length / 2];
        // 也可以理解成混戰極限一換一,不同的兩者一旦遇見就同歸於盡,最後活下來的值都是相同的,即要求的結果
        //時間O(n),空間O(1)
        int count = 0;
        int card = 0;
        for(int num:nums){
            if(count == 0) card = num;
            count += (card == num)?1:-1;
        }
        return card;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章