题目
给定一个大小为 n 的整数数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。
示例 1:
输入:[3,2,3]
输出:[3]
示例 2:
输入:nums = [1]
输出:[1]
示例 3:
输入:[1,1,1,3,3,2,2,2]
输出:[1,2]
提示:
1 <= nums.length <= 5 * 10 ^ 4
-10 ^ 9 <= nums[i] <= 10 ^ 9
进阶:尝试设计时间复杂度为 O(n)、空间复杂度为 O(1)的算法解决此问题。
将数组排序后遍历,与前一个相等则count++,否则,看count是否大于n/3,大于的话讲此数push到新数组,count又从1开始计数新的;
特别的是,跳出循环后记得还要判断一下count和n/3的关系
class Solution
{
public:
vector<int> majorityElement(vector<int>& nums)
{
if (nums.size() == 1)return nums;
sort(nums.begin(), nums.end());
int n = nums.size() / 3;
vector<int> arr;
int count = 1;
for (int i = 1; i < nums.size(); i++)
{
if (nums[i] == nums[i - 1])
count++;
else
{
if (count > n)
{
arr.push_back(nums[i - 1]);
}
count = 1;
}
}
if (count > n)
{
arr.push_back(nums[nums.size()-1]);
}
return arr;
}
};