数组-只出现一次的数字

转载请注明出处 https://blog.csdn.net/qq_31715429/article/details/80279561
本文出自:猴菇先生的博客

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。

说明:你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?

示例 1:
输入: [2,2,1]
输出: 1

示例 2:
输入: [4,1,2,1,2]
输出: 4

1.国际惯例,先上自己写的,得益于上一题,咱也学会了先排序在处理问题,排好序后确实好处理了,元素成对出现,中间或者末位夹杂着“单身狗”。。单层for循环,i每次加2,如果循环结束后没发现“单身狗”,那么它必然藏在最末位了。执行6ms美滋滋。

class Solution {
    public int singleNumber(int[] nums) {
        if (nums.length == 1) {
            return nums[0];
        }
        Arrays.sort(nums);
        for (int i = 0; i < nums.length - 1; i+=2) {
            if (nums[i] != nums[i + 1]) {
                return nums[i];
            }
        }
        return nums[nums.length - 1];
    }
}

2.别人写的耗时1ms。。使用 ^=,我java可能是白学了,位运算符,^=代表异或,转化成二进制的两个数,同一位上的数相同得0,不同得1。一个整数和它本身异或之后得到值是0,0与其他整数异或得到的是这个整数本身,套在这个题里面,也就是如果两个数相同,那么它们异或得0

class Solution {
    public int singleNumber(int[] nums) {
        int result = 0;
        for (int i = 0; i < nums.length; i++) {
            result ^= nums[i];
        }
        return result;
    }
}

曾梦想仗剑走天涯。。

猜你喜欢

转载自blog.csdn.net/qq_31715429/article/details/80279561