LeetCode #268. Missing Number
题目
解题方法
题目要求实现一个时空复杂度分别为O(n)和O(1)的方法,我的思路是采用交换数位的方法,判断过程比较繁琐就不再赘述了。
比较好的办法是用高斯公式,计算n个数的和,再减去数组中数字之和得到返回值。
代码
高斯公式法
class Solution:
def missingNumber(self, nums):
expected_sum = len(nums)*(len(nums)+1)//2
actual_sum = sum(nums)
return expected_sum - actual_sum
位置交换法
class Solution:
def missingNumber(self, nums: List[int]) -> int:
i = 0
n = len(nums)
ret = n
while i < n:
if nums[i] != i:
if nums[i] == n:
if i != n - 1 and nums[n-1] != n - 1:
nums[i], nums[n-1] = nums[n-1], nums[i]
else:
ret = i
i += 1
else:
if nums[nums[i]] != nums[i]:
temp = nums[i]
nums[i] = nums[nums[i]]
nums[temp] = temp
else:
ret = i
break
else:
i += 1
return ret

浙公网安备 33010602011771号