코테준비 - Majority Element II

정상화·2023년 2월 26일

LeetCode

목록 보기
199/222

Majority Element II


class Solution {
public:
    vector<int> majorityElement(vector<int> &nums) {
        vector<int> res;
        if (nums.empty()) {
            res =  {};
        } else if (nums.size() == 1){
            res = nums;
        } else if(nums.size() == 2) {
            res.push_back(nums.front());
            if (nums.front() != nums.back()) {
                res.push_back(nums.back());
            }
        } else {
            int major1, major2, cnt1, cnt2;
            major1 = major2 = INT32_MIN;
            cnt1 = 0;
            cnt2 = 0;

            loop(major1, major2, cnt1, cnt2, nums);


            if (std::count(nums.begin(), nums.end(), major1) > nums.size() / 3) {
                res.push_back(major1);
            }
            if (std::count(nums.begin(), nums.end(), major2) > nums.size() / 3) {
                res.push_back(major2);
            }
        }
        return res;
    }

    void loop(int& major1,int& major2,int& cnt1,int& cnt2,vector<int>&nums){
        for (auto &num: nums) {
            if (num == major1) {
                cnt1++;
            } else if (num == major2) {
                cnt2++;
            } else if (!cnt1) {
                major1 = num;
                cnt1 = 1;
            } else if (!cnt2) {
                major2 = num;
                cnt2 = 1;
            }else {
                cnt1--;
                cnt2--;
            }
        }
    }
};
profile
백엔드 희망

0개의 댓글