[LeetCode 解题报告]229. Majority Element II

Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋ times.

Note: The algorithm should run in linear time and in O(1) space.

Example 1:

Input: [3,2,3]
Output: [3]

Example 2:

Input: [1,1,1,3,3,2,2,2]
Output: [1,2]
class Solution {
public:
    vector<int> majorityElement(vector<int>& nums) {
        if (nums.empty())
            return {};
        
        vector<int> res;
        int first = 0, second = 0;
        int countFirst = 0, countSecond = 0;
        for (int i = 0; i < nums.size(); i ++) {
            if (nums[i] == first)
                countFirst ++;
            else if (nums[i] == second)
                countSecond ++;
            else if (countFirst == 0)
                countFirst = 1, first = nums[i];
            else if (countSecond == 0)
                countSecond = 1, second = nums[i];
            else
                countFirst --, countSecond --;
        }
        
        countFirst = 0, countSecond = 0;
        for (int i = 0; i < nums.size(); i ++) {
            if (nums[i] == first)
                countFirst ++;
            else if (nums[i] == second)
                countSecond ++;
        }
        
        if (countFirst > nums.size()/3)
            res.push_back(first);
        if (countSecond > nums.size()/3)
            res.push_back(second);
        return res;
    }
};
发布了467 篇原创文章 · 获赞 40 · 访问量 45万+

猜你喜欢

转载自blog.csdn.net/caicaiatnbu/article/details/104210321