Given an array of integers, the majority number is the number that occursmore than 1/3
of the size of the array.
Find it.
Notice
There is only one majority number in the array.
Example
Given [1, 2, 1, 2, 1, 3, 3]
, return 1
.
Challenge
O(n) time and O(1) extra space.
class Solution {
public:
/**
* @param nums: A list of integers
* @return: The majority number occurs more than 1/3.
*/
int majorityNumber(vector<int> nums) {
// write your code here
int cond1;
int count1 = 0;
int cond2;
int count2 = 0;
for (int i=0; i<nums.size(); i++)
{
if (count1 == 0)
{
cond1 = nums[i];
count1 = 1;
}
else if (nums[i] != cond1 && count2 == 0) //这个判断很重要
{
cond2 = nums[i];
count2 = 1;
}
else
{
if (nums[i] == cond1)
{
count1++;
}
else if (nums[i] == cond2)
{
count2++;
}
else
{
count1--;
count2--;
}
}
}
int t1 = 0;
int t2 = 0;
for (int i=0; i<nums.size(); i++)
{
if (count1 > 0 && nums[i] == cond1)
t1++;
else if (count2 > 0 && nums[i] == cond2)
t2++;
}
if (t1 > nums.size()/3)
return cond1;
if (t2 > nums.size()/3)
return cond2;
}
};