题目在这​​:https://leetcode-cn.com/problems/single-number/​

思路分析:

这道题题意很容易明白,找只出现了一次的数字。

法一:

直接暴力法。遍历然后统计出现的次数。

完整代码

for i in nums:
if nums.count(i) == 1: # 当有一个元素仅出现一次的时候,返回该数
return

法二:

使用哈希表存储元素出现的次数,然后找到出现一次的。
这里顺带提一句 enumerate()方法和items() 方法,
enumerate() 方法:
会输出元素和该元素对应的下标。
比如:
​​​seq = ['one', 'two', 'three']​​​ 输出:
​0 one 1 two 2 three​

items() 方法
以列表返回可遍历的(键, 值) 元组数组。
比如

dict = {'Google': 'www.google.com', 'Runoob': 'www.runoob.com', 'taobao': 'www.taobao.com'}
for key,values in dict.items():
print key,values

输出:

Google www.google.com
taobao www.taobao.com
Runoob www.runoob.com

完整代码:

hashmap = {}

for i in nums:
if i in hashmap: # 检查该元素是否在哈希表里,在的话其对应的value加1
hashmap[i] += 1
continue
hashmap[i] = 1 # 不在哈希表里。则让他加入哈希表,对应value为1
for key,value in hashmap.items():
if value == 1: # 遍历找到value为1对应的key的值。
print(key)

法三

使用异或的属性找到只出现了一次的数字。

首先几个知识点:

图中圆加号表示异或。

力扣(leetcode) 136. 只出现一次的数字 (枚举法) (哈希表法) (异或法)_数组


看懂了上面。我们就可以使用异或的性质完成本题。(所有数异或,最后剩下的一定是仅出现了一次的元素)

这里说一下。题目中已经明确。​​除了某个元素只出现一次以外,其余每个元素均出现两次​​​。
如果题目中没有这样的说明,则上面的方法就用不了了,因为 A ^ A ^ A = 0 ^ A = A

完整代码

= nums[0]  # 将第一个元素给了res

for i in range(1,len(nums)):
res ^= nums[i] # 逐步异或所有的元素 ,最后剩下的是仅出现一次的元素
print(res)