Given an array of integers, every element appears three times except for one. Find that single one.
Note:
Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?
大意:
找出数组中只出现一次的元素,其余的都是出现三次
注意:
你的算法需要有一个线性的复杂度。即o(n)。最好不要使用额外的memory来实现
分析:如果序列整齐,1112223444,看到这个规律可以想到,single num 两边的数字不等,也就是2 3 4,所以判断singlenum两边不等即可找出
特殊情况,当singlenum出现在首位或者末尾时候,加以特殊判断
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
if len(nums) == 1:
return nums[0]
if nums[0] != nums[1]:
return nums[0]
if nums[-1] != nums[-2]:
return nums[-1]
for i in xrange(1, len(nums)-1):
if nums[i+1] == nums[i] or nums[i-1] == nums[i]:
continue
return nums[i]
虽然排序了,倒是也accpeted了--