给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例 1 :
输入:nums = [2,2,1]
输出:1
示例 2 :
输入:nums = [4,1,2,1,2]
输出:4
示例 3 :
输入:nums = [1]
输出:1
看到这一题如果不考虑时间和空间复杂度,我的第一反应是两层循环。
然后我实在想不出怎么写,我就去看注解,我发现注解里没有两层循环的方法。使用集合这样的数据结构,我发现我很少能想到这样做。确实要提升
然后真正的解法是使用异或,异或这个知道,但从来没有用它来编程,第一次使用。。。。。。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return reduce(lambda x, y: x ^ y, nums)
reduce函数是将给定的函数应用于序列的前两个元素,然后将结果与下一个元素继续应用,直到序列中的所有元素被处理完毕。
reduce(function, iterable[, initializer])
标签:一次,数字,nums,示例,复杂度,元素,reduce,异或,136
From: https://blog.51cto.com/u_16123878/6987176