我是靠谱客的博主 欢喜电话,这篇文章主要介绍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:

复制代码
1
2
Input: [2,2,1] Output: 1

Example 2:

复制代码
1
2
Input: [4,1,2,1,2] Output: 4

二.解题思路

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

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

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

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

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

之后有高效算法会更新。

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

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

三.源码

1.Counter类

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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

复制代码
1
2
3
4
5
6
7
8
9
10
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.异或

复制代码
1
2
3
4
5
6
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内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部