题目:
Given an integer array of size n, find all elements that appear more than ⌊ n/3 ⌋
times. The algorithm should run in linear time and in O(1) space.
给一个含有n个整数的数组,找出所有出现次数超过 n/3 次的元素,时间复杂度O(n) ,空间复杂度O(1).
思路:
结果最多出现两个数字。思路类似http://blog.csdn.net/u012243115/article/details/42076523.
代码:
class Solution {
public:
vector<int> majorityElement(vector<int>& nums)
{
int times1 = 0 , times2 = 0;
int num1 = 0 , num2 = 0;
int len = nums.size();
vector<int> result;
for(int i = 0 ; i < len ; i++)
{
if(times1 == 0 || nums[i] == num1)
{
times1++;
num1 = nums[i] ;
}
else
if(times2 == 0 || nums[i] == num2)
{
times2++;
num2 = nums[i];
}
else
{
times1--;
times2--;
}
}
times1 = 0 , times2 = 0;
for(int j = 0 ; j < len ; j++)
{
if(nums[j] == num1)
times1++;
if(num1 != num2 && nums[j] == num2)
times2++;
}
if(times1 > len/3)
result.push_back(num1);
if(times2 > len/3)
result.push_back(num2);
return result;
}
};