136.给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
示例 1:
输入: [2,2,1] 输出: 1
方法一:
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
for i in range(1,len(nums)-1,2):
if nums[i-1]!=nums[i]:
return nums[i-1]
return nums[-1]
方法二:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
s={}
for i in nums:
if i not in s.keys():
s[i]=1
else:
s.pop(i)
return list(s.keys())[0]
#执行用时: 60 ms, 在Single Number的Python3提交中击败了54.92% 的用户
方法三:大神的方法,运用异或的原理
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
res = 0
for i in nums:
res^=i
return res
137.给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
示例 1:
输入: [2,2,3,2] 输出: 3
思路一:最简单的想法,一个一个的去数,看看哪个数字不是三,但是运行很慢
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
for i in nums:
if nums.count(i)!=3:
return i
执行用时: 1780 ms, 在Single Number II的Python3提交中击败了5.84% 的用户
思路二:每隔三个检验一次,看是否相同。检验的是每组的前两个。最后会把最后一个落下,如果循环结束的话,就是最后一个数字了。
class Solution:
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
nums.sort()
for i in range(1,len(nums)-1,3):
if nums[i-1]!=nums[i]:
return nums[i-1]
return nums[-1]
执行用时: 48 ms, 在Single Number II的Python3提交中击败了92.69% 的用户