法一:异或法
执行用时: 44 ms , 在所有 Python3 提交中击败了85.00% 的用户
内存消耗:15.9 MB , 在所有 Python3 提交中击败了 17.21% 的用户
class Solution:
def missingNumber(self, nums: List[int]) -> int:
missing=len(nums)
for i,num in enumerate(nums):
missing^=i^num
return missing
法二:排序
执行用时:60 ms, 在所有 Python3 提交中击败了34.17%的用户
内存消耗:15.8 MB, 在所有 Python3 提交中击败了26.81%的用户
class Solution:
def missingNumber(self, nums: List[int]) -> int:
if nums==[]:
return 0
nums.sort()
if nums[0]!=0:
return 0
for i in range(1,len(nums)):
if nums[i]-nums[i-1]>1:
return nums[i]-1
return len(nums)
法三:排序改进
执行用时:52 ms, 在所有 Python3 提交中击败了58.44%的用户
内存消耗:15.8 MB, 在所有 Python3 提交中击败了35.11%的用户
class Solution:
def missingNumber(self, nums: List[int]) -> int:
if nums==[]:
return 0
nums.sort()
if nums[0]!=0:
return 0
for i in range(len(nums)):
if i!=nums[i]:
return i
return len(nums)
法四:数学-高斯求和
40 ms 15.8 MB Python3
class Solution:
def missingNumber(self, nums: List[int]) -> int:
n=len(nums)
s=(0+n)*(n+1)//2
return s-sum(nums)
法五:哈希集合法
集合的寻找时间复杂度是O(1)
执行用时:40 ms, 在所有 Python3 提交中击败了93.91%的用户
内存消耗:16.2 MB, 在所有 Python3 提交中击败了9.30%的用户
class Solution:
def missingNumber(self, nums: List[int]) -> int:
numset=set(nums)
n=len(nums)+1
for i in range(n):
if i not in numset:
return i
return n