229. Majority Element II
Description
Given an integer array of size n
, find all elements that appear more than ⌊ n/3 ⌋
times.
Example 1:
1 2
| Input: nums = [3,2,3] Output: [3]
|
Example 2:
1 2
| Input: nums = [1] Output: [1]
|
Example 3:
1 2
| Input: nums = [1,2] Output: [1,2]
|
Constraints:
1 <= nums.length <= 5 * 10^4
-10^9 <= nums[i] <= 10^9
Follow up: Could you solve the problem in linear time and in O(1)
space?
Hints/Notes
Solution
Language: C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| class Solution { public: vector<int> majorityElement(vector<int>& nums) { int n = nums.size(); int mx1 = INT_MIN, mx2 = INT_MIN, count1 = 0, count2 = 0; for (int num : nums) { if (num == mx1) { count1++; } else if (num == mx2) { count2++; } else if (count1 == 0) { mx1 = num; count1++; } else if (count2 == 0) { mx2 = num; count2++; } else { count1--; count2--; } } count1 = 0; count2 = 0; for (int num : nums) { if (num == mx1) { count1++; } else if (num == mx2) { count2++; } } vector<int> res; if (count1 > n / 3) res.push_back(mx1); if (count2 > n / 3) res.push_back(mx2); return res; } };
|