找出1-N中missing的数

数组a[n-1]里存有1到n的所有数,除了一个数removed,找出这个missing的数。

#include <stdio.h>

#include <stdlib.h>

//数组a[n-1]里存有1到n的所有数,除了一个数removed,找出这个missing的数。

//容易发生溢出  时间复杂度O(N),空间复杂度O(1)

int missing0(int a[],int n)

{

    int sum=(n+1)*n/2;

    int i;

    for(i=0;i<n-1;i++){

        sum-=a[i];

    }

    return sum;

}



//时间复杂度O(N) 空间复杂度O(N)

int missing1(int a[],int n)

{

    int missing=0;

    int b[n];

    int i;

    memset(b, 0, sizeof(b));

    for(i=0;i<n-1;i++)

    {

        b[a[i]-1]=1;

    }

    for(i=0;i<n;i++)

    {

        if(b[i]==0){

            missing=i+1;break;

        }

    }

    return missing;

}

int main()

{



    int a[8]={1,4,7,9,8,2,3,5};

    printf("missing0=%d\n",missing0(a,9));

    printf("missing1=%d\n",missing1(a,9));

    return 0;

}

  

你可能感兴趣的:(SSI)