class Solution { public int singleNumber(int[] nums) { /*思路一:利用HashSet去除重复项(o(n)) Set<Integer> set=new HashSet<>(); for(int i=0;i<nums.length;i++){ if(!set.contains(nums[i])){ set.add(nums[i]); }else{ set.remove(nums[i]); } } int res=(int)set.toArray()[0]; return res;*/
//思路二:先排序然后左右比较(o(logn)) /*if(nums.length==1) return nums[0]; Arrays.sort(nums); if(nums[0]!=nums[1]) return nums[0]; for(int i=1;i<nums.length-1;i++){ if(nums[i]!=nums[i-1]&&nums[i]!=nums[i+1]) return nums[i]; } return nums[nums.length-1];*/
//思路三:位运算(XOR异或)(o(n))
//1、交换律:a ^ b ^ c <=> a ^ c ^ b
//2、任何数于0异或为任何数 0 ^ n => n
//3、相同的数异或为0: n ^ n => 0
int result = 0; for(int i=0;i<nums.length;i++) { result^=nums[i]; } return result; } }