https://leetcode-cn.com/problems/majority-element/
class Solution {
public:
int majorityElement(vector<int>& nums) {
int times = 0;
int ans = 0;
for (int i = 0; i < nums.size(); ++i)
{
if (ans == nums[i])
++times;
else if (times == 0)
{
ans = nums[i];
++times;
}
else
--times;
}
return ans;
}
};
https://leetcode-cn.com/problems/majority-element-ii/
class Solution {
public:
vector<int> majorityElement(vector<int>& nums) {
if (nums.size()==0) return {};
int a,b,cnt1=0,cnt2=0;
for (auto n:nums)
{
if (a == n)
++cnt1;
else if (b == n)
++cnt2;
else if (cnt1 == 0)
{
a = n;
++cnt1;
}
else if (cnt2 == 0)
{
b = n;
++cnt2;
}
else
{
--cnt1;
--cnt2;
}
}
cnt1 = cnt2 = 0;
for (auto n:nums)
{
if (n == a)
++cnt1;
else if (n == b)
++cnt2;
}
vector<int> ans;
if (cnt1>nums.size()/3)
ans.push_back(a);
if (cnt2>nums.size()/3)
ans.push_back(b);
return ans;
}
};
https://leetcode-cn.com/problems/single-number-iii/
class Solution {
public:
vector<int> singleNumber(vector<int>& nums) {
int x = 0;
for (auto n : nums)
x ^= n;
int bit = 0;
while(bit < 32)
{
if (x & (1<<bit))
break;
++bit;
}
int i = 0;
int j = 0;
while(j < nums.size())
{
if ((nums[j] & (1<<bit)) == 0)
{
swap(nums[i], nums[j]);
++i;
}
++j;
}
vector<int> ans;
x = 0;
for (int k = 0; k < i; ++k)
{
x ^= nums[k];
}
ans.push_back(x);
x = 0;
for (int k = i; k < j; ++k)
{
x ^= nums[k];
}
ans.push_back(x);
return ans;
}
};