题目要求:
给你一个 非空 整数数组 nums ,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
你必须设计并实现线性时间复杂度的算法来解决此问题,且该算法只使用常量额外空间。
示例:
输入:nums = [2,2,1] 输出:1
输入:nums = [4,1,2,1,2] 输出:4
输入:nums = [1] 输出:1
解体方法 :
方法一:
该方法为自己想的一遍过,虽然空间占用小但是耗时较长。
想法是将该列表排序,排完序后单独的数字肯定和前后的数字不一样则可得出答案。代码如下:
def singleNumber(self,nums:List[int]):
if len(nums)==1:
return nums[0]
nums.sort()
for i in range(len(nums)):
if i==0:
if nums[i]!=nums[i+1]:
return nums[i]
else:
continue
if nums[i]!=nums[i+1] and nums[i]!=nums[i-1]:
return nums[i]
if i==len(nums)-2:
return nums[i+1]
方法二:
直接用异或,因为一个数异或一个数然后再异或这个相同的数又会变为其本身(原理就是相同的数异或为0,0和任何数异或都为其数本身)代码如下:
class Solution:
def singleNumber(self, nums):
a = 0
for num in nums:
a = a ^ num
return a