LeetCode:面试题:消失的数字——时间复杂度
发布人:shili8
发布时间:2025-03-13 01:11
阅读次数:0
**消失的数字**
**问题描述**
给定一个长度为 n 的整数数组 nums,包含从1 到 n 的每个数字一次。请找出该数组中缺失的数字。
**示例**
* 输入:nums = [1,2,3,4]
输出:5* 输入:nums = [1,2,4,6,3,7,8]
输出:5**解决方案**
我们可以使用哈希表来解决这个问题。首先,我们遍历数组,将每个数字添加到哈希表中。如果某个数字不在哈希表中,则它是缺失的。
class Solution: def findMissingNumber(self, nums): n = len(nums) num_set = set() # 将所有数字添加到集合中 for i in range(1, n +1): num_set.add(i) # 遍历数组,找出缺失的数字 for num in nums: if num not in num_set: return num # 如果没有找到缺失的数字,则缺失的数字是 n +1 return n +1
**时间复杂度分析**
* 遍历数组:O(n)
* 将所有数字添加到集合中:O(n)
* 遍历数组,找出缺失的数字:O(n)
总时间复杂度为 O(2n) = O(n),因为我们只遍历数组一次。
**空间复杂度分析**
* 使用哈希表存储所有数字:O(n)
因此,空间复杂度为 O(n)。
**优化**
如果我们不使用哈希表,而是直接计算缺失的数字,则可以进一步优化时间复杂度。
class Solution: def findMissingNumber(self, nums): n = len(nums) expected_sum = (n +1) * n //2 # 计算实际和 actual_sum = sum(nums) # 缺失的数字是实际和与预期和之差 return expected_sum - actual_sum
**时间复杂度分析**
* 计算实际和:O(n)
* 计算缺失的数字:O(1)
总时间复杂度为 O(n)。
**空间复杂度分析**
* 使用变量存储计算结果:O(1)
因此,空间复杂度为 O(1)。