leetcode 41 缺失的第一个正数 first-missing-positive【ct】
===
思路:
可以使用一个map去记录,之后从1开始向后遍历,如果map中没有,就是这个值,这样需要O n的空间复杂度。
我们可以把这个数组当成一个hashmap,这样就只需要O1的空间复杂度。
1 首先遍历,如果遇到<0的,将这些值设置为 Infinity,因为这些值并没有用来索引的意义,就让他们在这里就行了
2 再遍历一次,找到 < nums.length+1 (或<=nums.length,因为里面的值是[1,nums.length])的值(这是为了排除第一步设为Infinity的这些值),将每个值nums[i] 对应的nums[i]-1的索引位置上的值设置为负数(注意 这里需要先取绝对值,然后设置负绝对值。是为了防止在遍历设置过程中,某个值已经被设为负数了,再处理会有问题。)
3 再遍历一次,遇到>0的值的这个索引,返回这个索引+1的值,就是要找的值