1.排序后,两两比较,若相同,i+2,若不同,返回nums[i],若此时i跳到了数组最后一个元素,则说明最后一个元素是只出现一次的数字,返回此时的nums[i];
class Solution {
public:
int singleNumber(vector<int>& nums) {
int length = nums.size();
if (nums.size()<=1)
return nums[0];
if (nums.size() % 2 ==0)
return false;
sort(nums.begin(),nums.end());
for (int i = 0;i < length;i=i+2)
{
if (i == length-1)
return nums[i];
if (nums[i] == nums[i+1])
;
else
return nums[i];
}
return false;
}
};
2.异或法:
首先明确一个定理:异或满足交换律,即a^b^a^b=a^a^b^b。
那就是说,如果该数组不存在只出现一次的元素,所有元素的异或结果会是0,如果存在只出现一次的元素,所有元素的异或结果就是该元素(a^b^a^c^b=c)。
class Solution {
public:
int singleNumber(vector<int>& nums) {
int length = nums.size();
int result = 0;
if (nums.size()<=1)
return nums[0];
if (nums.size() % 2 ==0)
return false;
for (int i = 0;i < length;i++)
{
result ^= nums[i];
}
return result;
}
};