136. 只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,1]
输出: 1
示例 2:
输入: [4,1,2,1,2]
输出: 4
class Solution { public: int singleNumber(vector<int>& nums) { return accumulate(nums.cbegin(),nums.cend(),0,bit_xor<int>()); } };
class Solution: def singleNumber(self, nums: List[int]) -> int: res=0 for i in nums: res^=i return res
137. 只出现一次的数字 II
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次。找出那个只出现了一次的元素。
说明:
你的算法应该具有线性时间复杂度。 你可以不使用额外空间来实现吗?
示例 1:
输入: [2,2,3,2]
输出: 3
示例 2:
输入: [0,1,0,1,0,1,99]
输出: 99
class Solution: def singleNumber(self, nums: List[int]) -> int: if len(nums)==1:return nums[0] nums.sort() if nums[0]!=nums[1]:return nums[0] if nums[-1]!=nums[-2]:return nums[-1] for i in range(len(nums)): if nums[i]!=nums[i-1] and nums[i]!=nums[i+1]: return nums[i]
class Solution: def singleNumber(self, nums: List[int]) -> int: return int((sum(set(nums))*3-sum(nums))/2)
260. 只出现一次的数字 III
给定一个整数数组 nums,其中恰好有两个元素只出现一次,其余所有元素均出现两次。 找出只出现一次的那两个元素。
示例 :
输入: [1,2,1,3,2,5]
输出: [3,5]
注意:
结果输出的顺序并不重要,对于上面的例子, [5, 3] 也是正确答案。
你的算法应该具有线性时间复杂度。你能否仅使用常数空间复杂度来实现?
class Solution: def singleNumber(self, nums: List[int]) -> List[int]: # s=int(sum(set(nums))*2-sum(nums)) # xor=0 # for i in nums: # xor^=i # res=[] # for i in range(s): # if i^(s-i)==xor: # res.append(i) # res.append(s-i) # break # return res if len(nums)==2:return nums nums.sort() res=[] if nums[0]!=nums[1]:res.append(nums[0]) if nums[-1]!=nums[-2]:res.append(nums[-1]) for i in range(1,len(nums)-1): if nums[i]!=nums[i-1] and nums[i]!=nums[i+1]: res.append(nums[i]) return res
class Solution: def singleNumber(self, nums: List[int]) -> List[int]: dict={} for i in nums: dict[i]=dict.get(i,0)+1 return [i for i,j in dict.items() if j==1]