【LeetCode】229. 求眾數 II 結題報告 (C++)
阿新 • • 發佈:2018-11-27
原題地址:https://leetcode-cn.com/problems/majority-element-ii/submissions/
題目描述:
給定一個大小為 n 的陣列,找出其中所有出現超過 ⌊ n/3 ⌋ 次的元素。
說明: 要求演算法的時間複雜度為 O(n),空間複雜度為 O(1)。
示例 1:
輸入: [3,2,3]
輸出: [3]
示例 2:
輸入: [1,1,1,3,3,2,2,2]
輸出: [1,2]
解題方案:
在上一題的基礎上,繼續採用摩爾投票法。
程式碼:
class Solution { public: vector<int> majorityElement(vector<int>& nums) { int n = nums.size(); vector<int> ans; int result1 = 0, result2 = 0, count1 = 0, count2 = 0; for (int x : nums) { if (x == result1) count1++; else if (x == result2) count2++; else if (count1 == 0) { result1 = x; count1 = 1; } else if (count2 == 0) { result2 = x; count2 = 1; } else { count1--; count2--; } } count1 = count2 = 0; for(int x : nums) { if(x == result1) count1++; if(x == result2) count2++; } if(count1 > (nums.size()/3)) ans.push_back(result1); if((count2 > (nums.size()/3)) && (result2!=result1)) ans.push_back(result2); return ans; } };