LeetCode 41. First Missing Positive
这个题目虽然是Hard,但是只要想到解法之后,就很简单了。
题目要求:找到最小的、没有出现在数组中的整数,数组未排序。
初看起来,这个至少得排个序才能搞定。但是题目说了,时间复杂度O(n),空间复杂度O(1)。
如果能把数字n填写到第n-1个,那不就能在O(n)时间内看出来缺失数字了吗?把数字n填写到第n-1个,完全就是遍历一遍所有的数字就可以了啊。
思路就这样出来了:
- 遍历所有数字,将数字n放到第n-1个位
- 遍历数组,第一个不满足nums[i]!=i+1的i+1即为缺失的数字
代码如下:
1 | class Solution { |
第一个for循环,虽然i并不一定在每次循环的时候递增,但是总的时间复杂度还是O(n):
对于所有的数字,要不交换到对应位置,要么不交换:即O(n)。
LeetCode 41. First Missing Positive