题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例:
输入: [2,2,1] 输出: 1
方式一:
先排序,然后两个两个遍历数组,两个数字不相等时输出,要注意奇数个时会发生数组溢出(数组越界),所以要对数组的最后进行限制,遍历到最后还没有找出的话就是最后一个。(遍历两次,耗时久)
代码:
public static int singleNumber(int[] nums) {
Arrays.sort(nums);
for (int i = 0; i < nums.length; i = i + 2) {
if (i==(nums.length-1)){
return nums[i];
}else{
if (nums[i]!=nums[i+1]){
return nums[i];
}
}
}
return 0;
}
方式二:异或
异为1,同为0。异或两次相同的数字之后还是不变,与唯一单独的数字异或后得到结果。
代码:
public static int singleNumber(int[] nums) {
//异或,异为1,同为0,异或两次相同之后仍旧为0,与唯一不同的异或后的得到此单独的数字
int res=0;//标志数字出现的情况
for (int i=0;i<nums.length;i++){
res ^=nums[i];
}
return res;
}