题目
Given a non-empty array of integers, every element appears three times except for one, which appears exactly once. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
Example 1:
Input: [2,2,3,2] Output: 3
Example 2:
Input: [0,1,0,1,0,1,99] Output: 99
ac代码
暴力解法 24ms
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort();
i=0
while i<len(nums)-3:
if nums[i]==nums[i+1]:
i+=3
else:
return nums[i]
return nums[i]
参考讨论区的答案,比较好的方法
用set方法,但是很奇葩的是我ac了44ms。。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
single=set(nums)
sumsingle=sum(single)
sums=sum(nums)
return (3*sumsingle-sums)/2
去掉了一个括号,效率提高了??变成了24ms。
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
single=set(nums)
sums=3*sum(single)-sum(nums)
return sums/2