题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
//大家怎么都喜欢用异或
//为啥我就想不到。。。
//果真简单,还是得多练多练
//a^0=a;a^a=0;
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res=0;
for(int i=0;i<nums.size();i++){
//a^0=a;a^a=0;
res = res ^ nums[i];
}
return res;
}
};
//非异或解法
//先将数组进行排序,再比较
class Solution {
public int singleNumber(int[] nums) {
//Arrays.sort(nums); JAVA排序
sort.(nums.begin(),nums.end()); // C++ vector容器排序
int n = nums.length;
for(int i=0;i<n;i+=2){
//如果到最后一个了都没return出去呢那说明最后一个肯定是,单独写一个判断防止数组越界。
if(i == n-1)
return nums[n-1];
if(nums[i] != nums[i+1])
return nums[i];
}
return -1;
}
}
//题目说不能使用额外的空间
//但是使用额外空间,另外设一个数组A[]记录出现次数应该也可以吧
class Solution {
public:
int singleNumber(vector<int>& nums) {
int res[]={0};
for(int i=0;i<nums.size();i++){
res[nums[i]]++;
}
for(int i=0;i<res.size();i++){
if(res[i]==1)
return i;
}
return -1;
}
};