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;
    }
}