概述
一.问题描述
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所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复