description:给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
我的解法(10ms):
class Solution {
public int singleNumber(int[] nums) {
Arrays.sort(nums);
int i=1;
if(nums.length==1){
return nums[0];
}
if(nums[0]!=nums[1]){
return nums[0];
}
if(nums[nums.length-1]!=nums[nums.length-2]){
return nums[nums.length-1];
}
while(i<nums.length){
if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1]){
return nums[i];
}
i++;
}
return 0;
}
}
仅仅按照题意一个一个的把所有情况都列举了出来,有点穷举法味道
最优解法 1ms:
class Solution {
public int singleNumber(int[] nums) {
int ans = nums[0];
for(int i = 1, len = nums.length; i < len; i++){
ans ^= nums[i];
}
return ans;
}
}
位运算比直接进行数值比较要快,这里的^=异或运算,两个数字相比,如果相同,则返回0,不同则返回不同的那个数,只要经过两次相同数的异或运算,必然回到最开始异或运算的那个数。