题解:
利用异或运算 a⊕a = 0 的性质,可用来消除所有出现了两次的元素,最后剩余的即为所得。
class Solution
{
public:int singleNumber(vector<int>& nums){// 初始化为0int 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;}
};