First Missing Positive

来源:互联网 发布:gom引擎源码 编辑:程序博客网 时间:2024/05/19 09:09

Given an unsorted integer array, find the first missing positive integer.

For example,
Given [1,2,0] return 3,
and [3,4,-1,1] return 2.

Your algorithm should run in O(n) time and uses constant space.


题目要求O(N)的时间和常数的空间,这就排除了排序和新建bucket记录的方式。 
这样的条件下只想到下边这个把源串当作bucket的记录方式,这样需要修改源串,如果是面试需要和面试官确认是否满足要求:
1. 遍历整个数组,对每一元素检查是否在[1,n]内,是的话就把它放到对应的位置上(cval - 1);
2. 从头开始检查修改后的数组,发现第一个没有出现的正整数则直接返回;
3. 到了最后只能说明源串内包含的就是[1,n]的数字,则第一个不存在正整数就是n+1.



    int firstMissingPositive(int A[], int n) {        for (int i = 0; i < n; ++i) {            int cval = A[i];            while (cval > 0 && cval <= n && A[cval - 1] != cval) {                swap(cval, A[cval - 1]);            }        }                for (int i = 0; i < n; ++i) {            if (A[i] != i + 1)                return i + 1;        }                return n + 1;    }


0 0
原创粉丝点击