Find Missing Number

这题算法不好归为那类,大概是交换类算法吧

class Solution {
public:
    int firstMissingPositive(int A[], int n) {
        for(int i=0;i<n;)
        {
            int cur=A[i]-1;
            if(cur<0 || cur>=n || A[cur]==A[i])//这里几次都犯了错误,写成cur==i, cur==i蕴含了A[cur]==A[i],这里应该
            即使是遇到和要交换的数相同,也不能交换,例如1 1这种会死循环,所以写A[cur]==A[i]
            {
                i++;
                continue;
            }
            swap(A[i],A[cur]);
        }
        for(int i=0;i<n;i++)
        {
            if(A[i]!=i+1)
                return i+1;
        }
        return n+1;//这里第一次写的时候,还漏掉了,因为可能真个数组都是1..n 那么n+1 就是返回值了
    }
};

Posted by richard爱闹 - 2月 3 2015
如需转载,请注明: 本文来自 Richard