LeetCode-136 Single Number 只出现一次的数字

版权声明:转载请注明原址,有错误欢迎指出 https://blog.csdn.net/iwts_24/article/details/83315987

题目链接

https://leetcode-cn.com/problems/single-number/

题意

中文题,题意很简单。

题解

        很有趣的一个题,最简单粗暴的当然是开辟额外空间暴力计算了。题目限制很多:最多只出现2次、只有唯一答案。那么不仅可以开辟数组这种最暴力的,还可以利用set的唯一性,当set不存在则存入,当set中存在则删除,这样最终set中只有一个最终答案。相比与纯暴力,这样也不需要大量的额外空间,还保证了O(n)的时间复杂度。

        不过看大佬题解,了解了利用异或运算的操作,比较6了。上面利用set来线性处理的方式就类似于异或了。假设有一组数据:2、3、5、2、3。那么可以有这样的操作:

2^3^5^2^3

如果进行交换律:

2^2^3^3^5

异或操作化简以后:

0^5 = 5

最终得到的就是单独的那个数。或者说因为必定是2个重复1个额外的,那么匹配的全部匹配归0以后,唯一没有匹配的就是答案了。

Java 代码

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

猜你喜欢

转载自blog.csdn.net/iwts_24/article/details/83315987