【力扣题】题目描述:
【Python3】代码:
1、解题思路:遍历列表元素,查看该元素在列表中共有多少个,返回个数为1的元素。
知识点:列表.count(...):统计列表中某元素个数。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
for x in nums:
if nums.count(x) == 1:
return x
2、解题思路:使用哈希映射(HashMap)来存储每个元素以及出现的次数。哈希映射中的每个键值对,键表示一个元素,值表示该元素出现的次数。返回哈希映射中值为1的键。
知识点:collections.Counter(...):用字典形式为列表中各元素计数。
字典形式.items():返回可遍历的字典形式的键值对(元组形式即(键,值))。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
from collections import Counter
adict = Counter(nums)
for key,val in adict.items():
if val == 1:
return key
3、解题思路:使用异或运算。列表中所有元素进行异或,最终结果就是只出现一次的元素。
(3-1)对列表中所有元素依次异或,并将异或结果累积求和。通过交换律和结合律,出现两次的元素异或结果为0,最终求和结果就是只出现一次的元素。
知识点:functools.reduce(...):对列表中的元素累积求和。
x ^ y:x与y进行异或运算。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
from functools import reduce
return reduce(lambda x,y:x^y,nums)
(3-2)遍历列表,直接对列表中所有元素依次进行异或。
知识点:res ^= x 即 res = res ^ x :两个元素进行异或运算并将结果赋值给res变量。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
res = 0
for x in nums:
res ^= x # res ^= x 即 res = res ^ x
return res
# 列表只有一个元素时,直接返回该元素。不用赋值并for循环,稍微快一点。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
if len(nums) == 1: return nums[0] # 只比上面增加这一步
res = 0
for x in nums:
res = res ^ x
return res