题目描述:
一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
思路:
这道题和下面的两道题本质上是一样的,因此同样的方法仍可使用。
剑指offer - 字符流中第一个不重复的字符 - python
剑指offer -第一个只出现一次的字符位置 - python
- 法1: 首先看数组中有哪些数字,然后依次查找它们在数组中的个数,如果个数为1则保存,最后返回保存的结果即可。
- 法2: 利用dict保存数组中的数字和出现的次数,然后找到值为1对应的键即可
- 法3: 先对数组进行排序,除了两个只出现一次的数字外,其余的数字都出现了两次,因此可以通过比较具体位置左右的数来进行判断它属于哪一类
AC代码
法1
# -*- coding:utf-8 -*-
class Solution:
def FindNumsAppearOnce(self, array):
# write code here
a = list(set(array))
a.sort(key = array.index)
r = []
for i in a:
count = 0
for n in array:
if i == n:
count += 1
if count == 1:r.append(i)
else:continue
return r
法2
# -*- coding:utf-8 -*-
class Solution:
# 返回[a,b] 其中ab是出现一次的两个数字
def FindNumsAppearOnce(self, array):
# write code here
if array == []:
return None
if len(array) == 1:
return array
d = {}
for n in array:
if n not in d.keys():
d[n] = 1
else:
d[n] = d[n] + 1
r = []
for s, n in d.items():
if n == 1:
r.append(s)
return r
法3
class Solution:
def FindNumsAppearOnce(self, array):
# write code here
if array == []:
return None
if len(array) == 1:
return array
array.sort()
r = []
for i in range(len(array)):
if i == 0 and array[i] != array[i+1] or i == len(array)-1 and array[i] != array[i-1]:
r.append(array[i])
elif array[i - 1] != array[i] and array[i] != array[i + 1]:
r.append(array[i])
return r