Problem
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.
Analysis
这题的求解是建立在645. Set Mismatch的基础上的,如果你没有做过这题,那么建议先做完这题之后,再来看本题。找丢失元素其实和找重复元素是一样的,都是先将数字放在对应的位置,不在自己位置上的就是有问题的数字。这题要找的是没出现过的最小的正数。同样按照nums[i]
应该在i+1
位置上的这个思路来处理数组,然后遍历数组,找到第一个不满足这个条件的下标,这个下标代表的值就是丢失的最小正数。
Solution
Coding上没什么难度,按照分析的思路进行即可。注意当所有的元素都匹配了位置的时候,返回size + 1
。
Code
1 | class Solution { |
运行时间:约4ms,超过85.10%的CPP代码。
Summary
这道题其实是综合了前面到题之后做的一个变形,本质上并没有很大的改变。我们的基本思路还是:将元素与位置一一对应,根据题目要求找出不符合要求的元素值或下标即可。本题的分析到此为止,谢谢!