题目:
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
解法一:(我自己的笨币解法,使用双指针,不断剪短列表长度)
空间复杂度确实是O(1),但时间复杂度太高。。。。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
if len(nums)<=1:
return nums[0]
n=len(nums)
l=0
r=n-1
while r>0:
if nums[0]==nums[r]:
#print(nums[0],nums[r])
del nums[0]
del nums[r-1]
#print(nums)
r=len(nums)-1
else:
r-=1
return nums[0]
解法二:位运算(很巧妙!!)
答:
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return reduce(lambda x, y: x ^ y, nums)
作者:LeetCode-Solution
链接:https://leetcode.cn/problems/single-number/solution/zhi-chu-xian-yi-ci-de-shu-zi-by-leetcode-solution/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
最后,解释一下reduce函数,自己平时用的不多,记录一下
from functools import reduce
#reduce(function, iterable[, initializer]) #reduce函数用来迭代运行一个函数内容
sumend = reduce(lambda x, y: x+y, [1,2,3,4,5,6,7,8,9]) # 使用 lambda 匿名函数
print(sum) #sumend=45