Leetcode-169-眾數
阿新 • • 發佈:2022-01-08
題目連結
題目描述
給出n個數,找到其中的眾數,保證有且僅有一個。
要求
時間複雜度:O(n), 空間複雜度:O(1)
思路
-
首先想到的還是雜湊表,但是空間複雜度。。不可能用雜湊。
-
核心思想:對拼消耗,就像玩卡牌遊戲一樣。
把相同的元素看作一個集合,這個集合就像是一個玩家的牌庫。
兩個不同的元素會的抵消,最後剩下個的元素就是眾數。 -
過程:遍歷陣列,判斷計數器。
計數器為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; } };