问题:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
题解:
1.我自己的解题思路,理由Arrays.sort()给数组排序,然后遍历找出(时长5-10ms)
class Solution {
public int singleNumber(int[] nums) {
int i=0;
Arrays.sort(nums);
while(i<nums.length-1){
if(nums[i]==nums[i+1]){
i=i+2;
}else{
return nums[i];
}
}
return nums[nums.length-1];
}
}
2.异或法(网上学习到的): (时长0-1ms)
思路:根据异或运算的特点,相同的数字经过异或运算后结果为0,除单独出现一次的数字外,其他数字都是出现两次的,那么这些数字经过异或运算后结果一定是0。而任何数字与0进行异或运算都是该数字本身。所以对数组所有元素进行异或运算,运算结果就是题目的答案。
public static int singleNumber(int[] nums) {
int num = 0;
for (int i = 0; i < nums.length; i++) {
num = num ^ nums[i];
}
return num;
}