一.问题描述
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
2Input: [2,2,1] Output: 1
Example 2:
复制代码
1
2Input: [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
14from 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
10class 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
6class Solution: def singleNumber(self, nums: List[int]) -> int: res=0 for num in nums: res^=num return res
最后
以上就是欢喜电话最近收集整理的关于leetcode 136. Single Number 解法 python的全部内容,更多相关leetcode内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复