


方案一,直接求解,python代码如下
class Solution:
def missingNumber(self, nums: List[int]) -> int:
return list(set([x for x in range(0,len(nums)+1)])-set(nums))[0]
可以优化为更高效的数学方法(高斯求和)或者位运算方法,避免使用 set,减少额外的空间开销。
优化方案
from typing import List
class Solution:
def missingNumber(self, nums: List[int]) -> int:
n = len(nums)
return n * (n + 1) // 2 - sum(nums)
优化点
- 时间复杂度: 由
O(N)(遍历set)降低到O(N)(求和运算)。 - 空间复杂度: 由
O(N)(set需要额外存储)降低到O(1)(只使用常数额外空间)。 - 数学方法(高斯求和公式): 计算
0到n之间所有数的总和,再减去数组nums的和,得到缺失的数。
如果你更喜欢 位运算(异或) 方法:
class Solution:
def missingNumber(self, nums: List[int]) -> int:
missing = len(nums)
for i, num in enumerate(nums):
missing ^= i ^ num
return missing
位运算优化点
- 时间复杂度:
O(N) - 空间复杂度:
O(1) - 核心思路:
x ^ x = 0,最终只剩下缺失的那个数字。
这两种方法比 set 操作更高效,推荐使用。

被折叠的 条评论
为什么被折叠?



