给定一个包含 [0, n] 中 n 个数的数组 nums ,找出 [0, n] 这个范围内没有出现在数组中的那个数。
进阶:
你能否实现线性时间复杂度、仅使用额外常数空间的算法解决此问题?
官方解法:https://leetcode-cn.com/problems/missing-number/solution/que-shi-shu-zi-by-leetcode/
解法一:排序
class Solution:
def missingNumber(self, nums):
nums.sort()
# Ensure that n is at the last index
if nums[-1] != len(nums):
return len(nums)
# Ensure that 0 is at the first index
elif nums[0] != 0:
return 0
# If we get here, then the missing number is on the range (0, n)
for i in range(1, len(nums)):
expected_num = nums[i-1] + 1
if nums[i] != expected_num:
return expected_num
解法二:哈希表
class Solution:
def missingNumber(self, nums):
num_set = set(nums)
n = len(nums) + 1
for number in range(n):
if number not in num_set:
return number
解法三:位运算(异或)
class Solution:
def missingNumber(self, nums):
missing = len(nums)
for i, num in enumerate(nums):
missing ^= i ^ num
return missing
解法四:数学
class Solution:
def missingNumber(self, nums):
expected_sum = len(nums)*(len(nums)+1)//2
actual_sum = sum(nums)
return expected_sum - actual_sum
力扣 (LeetCode)链接:https://leetcode-cn.com/leetbook/read/top-interview-questions-easy/xnj4mt/