【LeetCode】229. 求众数 II 结题报告 (C++)

原题地址: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;
    }
};

猜你喜欢

转载自blog.csdn.net/qq_32805671/article/details/84451742
今日推荐