基础算法

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).
只出现一次的数字2.0
原文地址:https://www.cnblogs.com/ppzhang/p/10487581.html