lintcode189-丢失的第一个正整数

题目描述:

lintcode189-丢失的第一个正整数_第1张图片

如果不做空间的要求,可以利用哈希的思想,元素i放在下标为i的位置。然后遍历辅助空间,第一个没有赋值的就是答案。

要求常数级别的空间,排序就只能在原数组上进行。不是抹掉原来位置的元素,而是交换,使得下标为i的位置元素为i+1(正整数从1开始). 如果数组元素的范围都是数组长度范围内,交换完成以后,每一个元素都被交换到正确的位置。如果有大于数组长度的元素,那1~数组长度范围内肯定有空缺,交换完成以后,保证数组长度范围内的元素都在正确的位置上。然后寻找第一个下标和元素不对应的就是丢失的数。

代码:

int firstMissingPositive(vector &A) {
        // write your code here
        for(int i=0; i=1 && A[i]<=A.size() && A[A[i]-1] != A[i]) //判断该元素是否是正整数,并且在数组长度范围内,并且是唯一的
                    swap(A[i], A[A[i]-1]);   //交换完成以后,i并不加一,因为换回来的元素还要进行判断
                else     //出现负数,大于数组元素范围的数, 重复的数,直接跳过
                    ++i;
            }
        }
        
        for(int i=0; i
参考博客:https://blog.csdn.net/wangyuquanliuli/article/details/45749023



你可能感兴趣的:(lintcode)