【Python3】【力扣题】136. 只出现一次的数字

【力扣题】题目描述: 

【Python3】【力扣题】136. 只出现一次的数字_第1张图片

【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、解题思路:使用异或运算。列表中所有元素进行异或,最终结果就是只出现一次的元素。

【Python3】【力扣题】136. 只出现一次的数字_第2张图片

(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

你可能感兴趣的:(力扣题,leetcode,python)