1. 一个列表list,里面只有一个数出现了一次,其他数都出现了两次。在时间复杂度O(n),空间复杂度O(1)下输出出现一次的数:
def selectnum(list): a = 0 for i in list: a = a ^ i return a #^为异或运算。数a异或运算数b两次,结果仍为数a。 #^运算可以将两个相同的数清零。
2. 一个列表list,里面只有一个数出现了一次,其他数都出现了三次。在时间复杂度O(n),空间复杂度O(1)下输出出现一次的数:
#位运算解决 class Solution: def singleNumber(self, nums): """ :type nums: List[int] :rtype: int """ a, b = 0, 0 for num in nums: b = ~a & (b ^ num) a = ~b & (a ^ num) return b #数学运算解决 class Solution(object): def singleNumber(self, nums): return (3*sum(set(nums)) - sum(nums))/2 #解析: #3*sum(set(nums))为去重后的结果的三倍,比sum(nums)多了两个只出现一次的结果,所以除以2即的只出现一次的数字。但是空间复杂度不O(1).