在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。
示例 1:
输入:nums = [3,4,3,3]
输出:4
示例 2:
输入:nums = [9,1,7,9,7,9,7]
输出:1
限制:
1 <= nums.length <= 10000
1 <= nums[i] < 2^31
来源:力扣(LeetCode)
排序后相同(相等,equal)的数字会相邻排列。从第一个元素开始,到下一个不一样的元素时,计算上一个元素出现的次数。次数为1,即是解。
"""
@author: WowlNAN
@created: 2020-08-01 00:00
@github: https://github.com/WowlNAN
"""
class Solution:
def MergeSort(self, data):
if len(data)<=1:
return data
mid=len(data)//2
data1=self.MergeSort(data[:mid])
data2=self.MergeSort(data[mid:])
return self.Merge(data1, data2)
def Merge(self, data1, data2):
data=[]
l1=len(data1)
l2=len(data2)
i=0
j=0
while i<l1 and j<l2:
if data1[i]<=data2[j]:
data.append(data1[i])
i+=1
else:
data.append(data2[j])
j+=1
if i<l1:
data+=data1[i:]
else:
data+=data2[j:]
return data
def singleNumber(self, nums: List[int]) -> int:
a=nums
a=self.MergeSort(a)
b=a[0]
c=0
i=0
l=len(a)
for i in range(l):
if a[i]==b:
c+=1
else:
if c==1:
return b
b=a[i]
c=1
if c==1:
return b
return -1