链接: https://leetcode.cn/problems/find-all-numbers-disappeared-in-an-array/
题意
给你一个含 n 个整数的数组 nums ,其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字,并以数组的形式返回结果。
字节AILAB二面,当时没想到O(n)复杂度的算法,然后发现这道题以前做过
看来还是要多复习以前做过的题啊
不然做了忘=没做
解法
在面试的时候,我只能想到排序二分或者排序然后从前往后扫的做法
面试官要求是O(n)时间复杂度
没想出来
其实可以利用索引来做一个映射,对于数组的每个元素,把它对应下标的值标记为一个负数
然后再扫一遍看哪些是正数就是结果了
但是这个标记不能简单的标记为-1,因为会丢失原先的值,比如当前数字a对应的值是7,如果改成-1
7这个信息就会被丢失
一个巧妙的做法是把这个数改成原来的相反数,这样既保留了原先的信息,同时也可以标记
确实很难想到啊
代码
1 | class Solution { |