题目:

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例:
输入: [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;
}