LeetCode:136. 只出现一次的数字(python3,JavaScript)

Posted 南岸青栀*

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode:136. 只出现一次的数字(python3,JavaScript)相关的知识,希望对你有一定的参考价值。

136. 只出现一次的数字

在这里插入图片描述

python3

法1:建立两个表一个用来记录值,一个用来记录出现次数

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
    
        key,value = [],[]

        for n in nums:
            if n in key:
                value[key.index(n)] += 1
            else:
                key.append(n)
                value.append(1)
        print(key,value)
        return key[value.index(1)]

优化一下:使用字典

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        dic = {}
        for n in nums:
            if n in dic:
                dic[n] += 1
            else:
                dic[n] = 1
        key = list(dic.keys())
        value = list(dic.values())
        return key[value.index(1)]

法3:先排序,然后遍历查看单个数字

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        #先排序后比较只有一个出现的
        if len(nums) == 1:
            return nums[0]
        nums.sort()
        for i in range(1,len(nums),2):
            if nums[i] != nums[i-1]:
                return nums[i-1]
            if (i + 2) == len(nums):
                return nums[-1]

法4:异或

进阶:不使用额外的空间
在这里插入图片描述

class Solution:
    def singleNumber(self, nums: List[int]) -> int:

        #异或
        res = 0
        for n in nums:
            res ^= n
        return res

借助reduce()函数

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        #异或
        return reduce(lambda x,y:x^y,nums)

补充

reduce() 函数会对参数序列中元素进行累积。

函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

javascript

位运算

var singleNumber = function(nums) {
    let res = 0
    for(let i=0;i<nums.length;i++){
        res ^= nums[i]
    }
    return res
};

以上是关于LeetCode:136. 只出现一次的数字(python3,JavaScript)的主要内容,如果未能解决你的问题,请参考以下文章

leetcode136 只出现一次的数字(Easy)

LeetCode 136. 只出现一次的数字

LeetCode第136题—只出现一次的数字—Python实现

LeetCode-136. 只出现一次的数字(java)

Leetcode-136. 只出现一次的数字

[leetcode]136. 只出现一次的数字