我是靠谱客的博主 欢喜电话,最近开发中收集的这篇文章主要介绍leetcode 136. Single Number 解法 python,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一.问题描述

Given a non-empty array of integers, every element appears twice except for one. Find that single one.

Note:

Your algorithm should have a linear runtime complexity. Could you implement it without using extra memory?

Example 1:

Input: [2,2,1]
Output: 1

Example 2:

Input: [4,1,2,1,2]
Output: 4

二.解题思路

这道题可以用python的Counter类来处理,之后就有每个字符的出现次数,然后遍历count找出现次数为1的值就好了。

也可以自己写,用集合,遍历nums,判断当前num是否在集合里面,在的话从集合删掉,不在的话加进去。

因为只有一个数只出现一次,其他数出现两次,因此最后只会剩一个数在集合中。

还有一个比较高级的算法,

就是用异或运算,异或运算满足交换律和结合律,两个相同的数异或是0,把nums里的所有数拿出来异或,最后肯定只剩线落单的那一个。

之后有高效算法会更新。

更多leetcode算法题解法请关注我的专栏leetcode算法从零到结束或关注我。

欢迎大家一起套路一起刷题一起ac。

三.源码

1.Counter类

from collections import Counter
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        counter=Counter(nums)
        return [key for key in counter if counter[key]==1][0]


# or
from collections import Counter
class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        counter=Counter(nums)
        for key in counter:
            if counter[key]==1:return key

2.set

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        counter=Counter(nums)
        for key in counter:
            if counter[key]==1:return key
        count=set()
        for num in nums:
            if num in count:count.remove(num)
            else:count.add(num)
        return list(count)[0]

3.异或

class Solution:
    def singleNumber(self, nums: List[int]) -> int:
        res=0
        for num in nums:
            res^=num
        return res

 

最后

以上就是欢喜电话为你收集整理的leetcode 136. Single Number 解法 python的全部内容,希望文章能够帮你解决leetcode 136. Single Number 解法 python所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(42)

评论列表共有 0 条评论

立即
投稿
返回
顶部