LeetCode 41. First Missing Positive
2020-06-19 15:27:02
# leetcode
# hard
Problem
LeetCode 41. First Missing Positive
1. 题目简述
给出一个未排序的整形数组,找出最小的缺失的正整数,要求只能使用常数级别的extra space。例如:
Example 1:
Input: [1,2,0]
Output: 3
Example 2:
Input: [3,4,-1,1]
Output: 2
Example 3:
Input: [7,8,9,11,12]
Output: 1
2. 算法思路
相关问题:
Array
这道题是属于比较smart的那种题,比较考验数学思维,做过基本上就会,没做过很难想。属于hard里难度较低的那种。
首先我们对于一个长度为n的数组,它的第一个missing number最大只可能是n+1,边界情况是n个数是由(1…n)不重复组成。
因此,对于负数,0或者大于n的数字,我们都可以把它转化成一个固定的数,这里我们设置为n+1,这样我们就能保证数组中的数都是正整数了。
现在问题在于如何使用常数级别的extra space。我们知道一共是有n个数,数组中的数字经过转化以后都变为了[1, n + 1]之间,因此,如果某个数字i有出现过,我们将第i个数(index为i - 1)置为负数即可(i != n + 1),最后判断第一个出现的正数,那么该index + 1即为所求;如果没有找到正数,那么返回n + 1。
这里有一些小tips需要注意,例如不要对一个数字两次取反,以及计算index的时候需要取绝对值,因为有可能在处理前面的数字的时候把后面的数已经置为负数了。
1 | class Solution { |