Sunday, 4 October 2015

Print missing elements that lie in range 0 – 99

Given an array of integers print the missing elements that lie in range 0-99. If there are more than one missing, collate them, otherwise just print the number.
Note that the input array may not be sorted and may contain numbers outside the range [0-99], but only this range is to be considered for printing missing elements.
Examples
     Input: {88, 105, 3, 2, 200, 0, 10}
     Output: 1
             4-9
             11-87
             89-99


     Input: {9, 6, 900, 850, 5, 90, 100, 99}
     Output: 0-4
             7-8
             10-89
             91-98
Expected time complexity O(n), where n is the size of the input array.
We strongly recommend to minimize your browser and try this yourself first.
The idea is to use a boolean array of size 100 to keep track of array elements that lie in range 0 to 99. We first traverse input array and mark such present elements in the boolean array. Once all present elements are marked, the boolean array is used to print missing elements.
Following is C implementation of above idea.
// C program for print missing elements
#include<stdio.h>
#define LIMIT 100
 
// A O(n) function to print missing elements in an array
void printMissing(int arr[], int n)
{
    // Initialize all number from 0 to 99 as NOT seen
    bool seen[LIMIT] = {false};
 
    // Mark present elements in range [0-99] as seen
    for (int i=0; i<n; i++)
      if (arr[i] < LIMIT)
       seen[arr[i]] = true;
 
    // Print missing element
    int i = 0;
    while (i < LIMIT)
    {
        // If i is missing
        if (seen[i] == false)
        {
            // Find if there are more missing elements after i
            int j = i+1;
            while (j < LIMIT && seen[j] == false)
                  j++;
 
            // Print missing single or range
            (i+1 == j)? printf("%d\n", i): printf("%d-%d\n", i, j-1);
 
            // Update u
            i = j;
        }
        else
            i++;
    }
}
 
// Driver program
int main()
{
    int arr[] = {88, 105, 3, 2, 200, 0, 10};
    int n = sizeof(arr)/sizeof(arr[0]);
    printMissing(arr, n);
    return 0;
}
Output:
1
4-9
11-87
89-99
Time complexity of the above program is O(n).

No comments:

Post a Comment