Quick actions

cmd+k|ctrl+k

Navigation

Languages

presc

Snippet info

Language

C

Visibility

public

Author

stefanescu.razvan

Created

2018-03-20T18:40:47Z

Updated

2018-03-23T08:46:57Z

#include <stdio.h>
 
/*
 * Given a series of positive sequential numbers (incremented by 1), find the first missing number.
 */

/*
 GetMissingNumber takes array and size of array as arguments
 */
// one approach
int GetMissingNumber1 (int a[], int n)
{
    int i, total;
    total  = (n+1)*(n+2)/2;   
    for ( i = 0; i< n; i++)
       total -= a[i];
    return total;
}

// another approach
int GetMissingNumber2 (int a[], int n)
{
    int i, num = a[0];
    for (i=0; i<n; i++) {
        if (num == a[i]) {
            num++;
        } else {
            return num;
        }
    }
}

// try to write an implementation with O(log(n))
int missingNumber(int a[], int min, int max) {
    int pivot;
    
    if (min >= max)
        return min + 1;
        
    pivot = (min + max) / 2;
    if (a[pivot] == pivot + 1)
        return missingNumber(a, pivot + 1, max);
    return missingNumber(a, min, pivot);
}

int GetMissingNumber3 (int a[], int n) {
    return missingNumber(a, 0, n);
} 

/*
 * Program to test above functions
 */
int seq_main()
{
    int a[] = {1,2,4,5,6};
    int miss;
    miss = GetMissingNumber1(a,5);
    printf("%d\n", miss);
    miss = GetMissingNumber2(a,5);
    printf("%d\n", miss);
    miss = GetMissingNumber3(a,5);
    printf("%d\n", miss);
}

/*
 * Output will be 3.
 */
INFO