1. 程式人生 > 其它 >Leetcode-169-眾數

Leetcode-169-眾數

題目連結


題目描述

給出n個數,找到其中的眾數,保證有且僅有一個。

要求

時間複雜度:O(n), 空間複雜度:O(1)

思路

  1. 首先想到的還是雜湊表,但是空間複雜度。。不可能用雜湊。

  2. 核心思想:對拼消耗,就像玩卡牌遊戲一樣。
    把相同的元素看作一個集合,這個集合就像是一個玩家的牌庫
    兩個不同的元素會的抵消,最後剩下個的元素就是眾數。

  3. 過程:遍歷陣列,判斷計數器。
    計數器為0時,更新ans為當前元素,計數器+1。
    計數器不為0時,若當前元素與ans相同,計數器+1,否則計數器-1
    最後ans的值為眾數。


C++方法

class Solution {
public:
    int majorityElement(vector<int>& nums) {
        int cnt = 0;
        int ans = 0;
        for(int i = 0; i < nums.size(); i++) {
            if (cnt == 0) {
                cnt ++;
                ans = nums[i];
            }
            else if (nums[i] == ans)
                cnt ++;
            else
                cnt--;
        }
        return ans;
    }
};