Loading

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;
    }
};
posted @ 2022-01-08 11:22  ARUI丶  阅读(31)  评论(0编辑  收藏  举报