41. First Missing Positive
Difficulty: Hard
Given an unsorted integer array, find the smallest missing positive integer.
Example 1:
1 | Input: [1,2,0] |
Example 2:
1 | Input: [3,4,-1,1] |
Example 3:
1 | Input: [7,8,9,11,12] |
Note:
Your algorithm should run in O(n) time and uses constant extra space.
Solution
Language: Java
一个没有遗漏的数组是从1到n的乱序数组,依照这个思想,把范围内的数字交换到它对应的位置上,也就是数字是1
到length
的数字交换到0
到length-1
上,然后从头开始数,哪个不是在原来的位置上哪个就是遗漏的数字。
边界条件:
- 当出现重复数字的时候,也就是发现目前遍历到的数字和本来应该交换的位置相同时(也就是同一个数字已经归位了一次),那么直接跳过
- 第二次从头遍历时,如果遍历完也没有return,那么说明缺的是最后一个数字,也就是
length + 1
1 | class Solution { |