【题目】
【代码】
执行用时:40 ms, 在所有 Python3 提交中击败了46.05% 的用户
内存消耗:16.9 MB, 在所有 Python3 提交中击败了16.15% 的用户
通过测试用例:14 / 14
class Solution:
def singleNonDuplicate(self, nums: List[int]) -> int:
cnt=Counter(nums)
for key in cnt:
if cnt[key]==1:
return key
【方法2】异或运算
因为题目中说了,每个数字都
class Solution:
def singleNonDuplicate(self, nums: List[int]) -> int:
ans=nums[0]
for i in range(1,len(nums)):
ans^=nums[i]
return ans
【方法3:进阶法】二分
执行用时:32 ms, 在所有 Python3 提交中击败了89.12% 的用户
内存消耗:16.8 MB, 在所有 Python3 提交中击败了68.50% 的用户
通过测试用例:14 / 14
class Solution:
def singleNonDuplicate(self, nums: List[int]) -> int:
left,right=0,len(nums)-1
while left<right:
mid=left+(right-left)//2
if nums[mid^1]==nums[mid]:
left=mid+1
else:
right=mid
return nums[left]
【方法4】二分
执行用时:44 ms, 在所有 Python3 提交中击败了21.19% 的用户
内存消耗:16.9 MB, 在所有 Python3 提交中击败了19.82% 的用户
通过测试用例:14 / 14
class Solution:
def singleNonDuplicate(self, nums: List[int]) -> int:
left,right=0,len(nums)-1
while left<right:
mid=left+(right-left)//2
mid -= mid & 1
if nums[mid+1]==nums[mid]:
left=mid+2
else:
right=mid
return nums[left]