只出现一次的数字Ⅱ
题目描述:
解题思路:
python3
第一种:排序查找法。这个方法是根据原先的那道题:只出现一次的数字Ⅰ ,进行稍微的改进,方法和思路都是一样的,可以参考。 唯一的改变就是,之前的题目中,相同数字的出现次数为2
次,而这次是3
次,所以我们排完序之后,只需要每隔3
位进行查找,就能很快锁定这个唯一的数字。 时间复杂度:O(N )
class Solution :
def singleNumber ( self, nums: List[ int ] ) - > int :
nums. sort( )
for i in range ( 0 , len ( nums) - 1 , 3 ) :
if nums[ i] != nums[ i + 1 ] :
return nums[ i]
return nums[ - 1 ]
第二种:纯数学方法。这个方法和之前的那道题的第二种方法也是一样的,也是进行了小改动。 这里我们去重之后求和,因为重复数字重复次数是3
次,所以我们就将该和乘3
,再减去原列表之和,最后会剩下两倍的唯一数组,这时只需要整除2
就可以得到啦。 时间复杂度:O(N )
class Solution2 :
def singleNumber ( self, nums: List[ int ] ) - > int :
result = ( 3 * sum ( set ( nums) ) - sum ( nums) ) // 2
return result
from collections import Counter
class Solution :
def singleNumber ( self, nums: List[ int ] ) - > int :
dictionary = Counter( nums)
for i in dictionary. keys( ) :
if dictionary[ i] == 1 :
return i
class Solution :
def singleNumber ( self, nums: List[ int ] ) - > int :
ones = temp = 0
for i in nums:
ones = ~ temp & ( ones ^ i)
temp = ~ ones & ( temp ^ i)
return ones