📃题目
给你一个 非空 整数数组 nums
,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
🪄解法
1.二次删除法
使用异常处理来返回,不太正常
# 这个remove耗时惊人,好在不超时
def singleNumber1(nums):
for i in set(nums):
# 两次remove
nums.remove(i)
try:
# 找不到第二个i啊,那就返回吧
nums.remove(i)
except:
return i
2.排序找人
排序找不相同的
def singleNumber2(nums):
# 排序下
nums = sorted(nums)
for i in range(0, len(nums), 2):
# 用于处理单独的数在最后一个的情况
if i == len(nums) - 1:
return nums[i]
# 如果相邻不同,就返回
if nums[i] != nums[i + 1]:
return nums[i]
3.哈希表法
很快啊
# 哈希表法
def singleNumber3(nums):
dict = {}
for i in nums:
if i in dict:
dict[i] += 1
else:
dict[i] = 1
for i in dict:
if dict[i] == 1:
return i
4.异或法
以上的都是不符合题意的
要求是你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
只有这样使用异或来解决
# 异或法
def singleNumber4(nums):
a = 0
for i in nums:
a ^= i
return a
❤️结尾
个人站点:点击查看
CSDN主页:点击查看
Leetcode:点击查看
不定期更新Leetcode题解(可能还有其它杂乱内容),欢迎关注!