LeetCode 探险模式
数据结构与算法
数组 Ⅱ
Q3. 找到所有数组中消失的数字
给你一个含
n个整数的数组nums,其中nums[i]在区间[1, n]内。请你找出所有在[1, n]范围内但没有出现在nums中的数字,并以数组的形式返回结果。示例 1:
1
2 输入:nums = [4,3,2,7,8,2,3,1]
输出:[5,6]示例 2:
1
2 输入:nums = [1,1]
输出:[2]提示:
n == nums.length1 <= n <= 1051 <= nums[i] <= n进阶: 你能在不使用额外空间且时间复杂度为
O(n)的情况下解决这个问题吗? 你可以假定返回的数组不算在额外空间内。
解法 1
算法与数据结构
利用哈希表,遍历一遍数组,记录所有数字出现的次数。最后遍历哈希表,找到未出现的数字即为结果。
参考代码
1 | class Solution { |
注:operator[] 在 key 不存在时会默认插入,如果使用
if (mp[i] == 0) 判断,若 i 不存在于
mp,会自动插入
{i: 0}。虽然不影响正确性,但是会导致第二轮循环中
mp 不断膨胀。
复杂度分析
- 时间复杂度:
,循环遍历的复杂度为 ,哈希表插入与查询均为 ; - 空间复杂度:
,哈希表最多存储 个键值对;
解法 2
算法与数据结构
既然数组内元素的范围是
参考代码
1 | class Solution { |
复杂度分析
- 时间复杂度:
,循环遍历的复杂度为 ,哈希表插入与查询均为 ; - 空间复杂度:
;
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 科海拾零!
评论