题解:
利用异或运算 a⊕a = 0 的性质,可用来消除所有出现了两次的元素,最后剩余的即为所得。
class Solution
{
public:
int singleNumber(vector<int>& nums)
{
// 初始化为0
int ans = 0;
for(int x: nums)
{
// 异或操作
ans ^= x;
}
return ans;
}
};
sort排序法的两种解法:
解1:
class Solution
{
public:
int majorityElement(vector<int>& nums)
{
sort(nums.begin(), nums.end());
//因为出现频率大于n/2,所以排序后的中间位置必然是众数
return nums[nums.size() / 2];
}
};
解2:
// 先将元素继续排序 然后进行计数,如果当前位与下一位相同直接进行计数加一然后比较一下是否超过 n/2;
class Solution1
{
public:
int majorityElement(vector<int>& nums)
{
if (nums.size() == 1) return nums[0];
sort(nums.begin(), nums.end());
int count = 0;
for (int i = 0; i < nums.size() - 1; i++)
{
if (nums[i] == nums[i + 1])
{
count ++ ;
}
if (count + 1 > nums.size() / 2)
return nums[i];
}
return 0;
}
};