Description:
Given an unsorted integer array, find the first missing positive integer.
For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.Your algorithm should run in O(n) time and uses constant space.
题目理解:问题倒是十分的简单,所以这道题hard的原因在于固定的额外空间,也就是要原址操作。
如果不要求原址操作,那就是easy,但是原址操作的确也是不太好想,最后一瞬间想到了散列表,就想到这题的解法了,
也就是将一个数放到它应该在的位置上,比如数字5
,那么它就该在数组的4
位置上,那么通过直接索引加上交换,
就能实现题目要求。
PS:之前写的没有考虑固定空间,辣鸡。
代码:
1 | public class Solution { |
额外空间只使用了三个int
,循环每次都操作一个数,或是放到最后,或者正确位置,并且同一个位置最多会被交换一次,所以复杂度是O(n)的。
复杂度:O(n)。
运行时间:12ms。
击败:56.77%