Find the Missing Number

You are given a list of n-1 integers and these integers are in the range of 1 to n. There are no duplicates in the list. One of the integers is missing in the list. Write an efficient code to find the missing integer.

Example:

Input: arr[] = {1, 2, 4, 6, 3, 7, 8}
Output: 5
Explanation: The missing number from 1 to 8 is 5

Input: arr[] = {1, 2, 3, 5}
Output: 4
Explanation: The missing number from 1 to 5 is 4

Method 1: This method uses the technique of summation formula.



  • Approach: The length of the array is n-1. So the sum of all n elements, i.e sum of numbers from 1 to n can be calculated using the formula n*(n+1)/2. Now find the sum of all the elements in the array and subtract it from the sum of first n natural numbers, it will be the value of the missing element.
  • Algorithm:
    1. Calculate the sum of first n natural numbers as sumtotal= n*(n+1)/2
    2. create a variable sum to store the sum of array elements.
    3. Traverse the array from start to end.
    4. Update the value of sum as sum = sum + array[i]
    5. print the missing number as sumtotal – sum
  • Implementation:

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <bits/stdc++.h>
    using namespace std;
      
    // Function to get the missing number
    int getMissingNo(int a[], int n)
    {
      
        int total = (n + 1) * (n + 2) / 2;
        for (int i = 0; i < n; i++)
            total -= a[i];
        return total;
    }
      
    // Driver Code
    int main()
    {
        int arr[] = { 1, 2, 4, 5, 6 };
        int n = sizeof(arr) / sizeof(arr[0]);
        int miss = getMissingNo(arr, n);
        cout << miss;
    }

    chevron_right

    
    

    C

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <stdio.h>
      
    /* getMissingNo takes array and size of array as arguments*/
    int getMissingNo(int a[], int n)
    {
        int i, total;
        total = (n + 1) * (n + 2) / 2;
        for (i = 0; i < n; i++)
            total -= a[i];
        return total;
    }
      
    /*program to test above function */
    int main()
    {
        int a[] = { 1, 2, 4, 5, 6 };
        int miss = getMissingNo(a, 5);
        printf("%d", miss);
        getchar();
    }

    chevron_right

    
    

    Java

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program to find missing Number
      
    class Main {
        // Function to ind missing number
        static int getMissingNo(int a[], int n)
        {
            int i, total;
            total = (n + 1) * (n + 2) / 2;
            for (i = 0; i < n; i++)
                total -= a[i];
            return total;
        }
      
        /* program to test above function */
        public static void main(String args[])
        {
            int a[] = { 1, 2, 4, 5, 6 };
            int miss = getMissingNo(a, 5);
            System.out.println(miss);
        }
    }

    chevron_right

    
    

    Python

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # getMissingNo takes list as argument
    def getMissingNo(A):
        n = len(A)
        total = (n + 1)*(n + 2)/2
        sum_of_A = sum(A)
        return total - sum_of_A
      
    # Driver program to test the above function
    A = [1, 2, 4, 5, 6]
    miss = getMissingNo(A)
    print(miss)
    # This code is contributed by Pratik Chhajer

    chevron_right

    
    

    C#

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C# program to find missing Number
    using System;
      
    class GFG {
        // Function to ind missing number
        static int getMissingNo(int[] a, int n)
        {
            int total = (n + 1) * (n + 2) / 2;
      
            for (int i = 0; i < n; i++)
                total -= a[i];
      
            return total;
        }
      
        /* program to test above function */
        public static void Main()
        {
            int[] a = { 1, 2, 4, 5, 6 };
            int miss = getMissingNo(a, 5);
            Console.Write(miss);
        }
    }
      
    // This code is contributed by Sam007_

    chevron_right

    
    

    PHP

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    <?php
    // PHP program to find
    // the Missing Number
      
    // getMissingNo takes array and
    // size of array as arguments
    function getMissingNo ($a, $n)
    {
        $total = ($n + 1) * ($n + 2) / 2; 
        for ( $i = 0; $i < $n; $i++)
            $total -= $a[$i];
        return $total;
    }
      
    // Driver Code
    $a = array(1, 2, 4, 5, 6);
    $miss = getMissingNo($a, 5);
    echo($miss);
      
    // This code is contributed by Ajit.
    ?>

    chevron_right

    
    

    Output :

    3
  • Compelxity Analysis:
    • Time Complexity: O(n).
      Only one traversal of array is needed.
    • Space Complexity: O(1).
      No extra space is needed

Modification for Overflow

  • Approach: The approach remains the same but there can be overflow if n is large. In order to avoid integer overflow, pick one number from known numbers and subtract one number from given numbers. This way there won’t have Integer Overflow ever.
  • Algorithm:
    1. create a variable sum = 1 to which will store the missing number and a counter c = 2.
    2. Traverse the array from start to end.
    3. Update the value of sum as sum = sum – array[i] + c and update c as c++.
    4. print the missing number as sum.
  • Implementation:

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <bits/stdc++.h>
    using namespace std;
      
    // a represents the array
    // n : Number of elements in array a
    int getMissingNo(int a[], int n) 
        int i, total=1; 
          
        for ( i = 2; i<= (n+1); i++)
        {
            total+=i;
            total -= a[i-2];
        }
        return total; 
      
    //Driver Program
    int main() {
        int arr[] = {1, 2, 3, 5};
        cout<<getMissingNo(arr,sizeof(arr)/sizeof(arr[0]));
        return 0;
    }
      
    //This code is contributed by Ankur Goel

    chevron_right

    
    

    Java

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java implementation 
    class GFG
    {
      
        // a represents the array
        // n : Number of elements in array a
        static int getMissingNo(int a[], int n) 
        {
            int total = 1;
            for (int i = 2; i <= (n + 1); i++)
            {
                total += i;
                total -= a[i - 2];
            }
            return total;
        }
      
        // Driver Code
        public static void main(String[] args)
        {
            int[] arr = { 1, 2, 3, 5 };
            System.out.println(getMissingNo(arr, arr.length));
        }
    }
      
    // This post is contributed 
    // by Vivek Kumar Singh

    chevron_right

    
    

    Python3

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # a represents the array
    # n : Number of elements in array a
    def getMissingNo(a, n): 
        i, total = 0, 1
      
        for i in range(2, n + 2):
            total += i
            total -= a[i - 2]
        return total
      
    # Driver Code
    arr = [1, 2, 3, 5]
    print(getMissingNo(arr, len(arr)))
      
    # This code is contributed by Mohit kumar

    chevron_right

    
    

    C#

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    using System;
      
    class GFG
    {
          
    // a represents the array
    // n : Number of elements in array a
    static int getMissingNo(int[] a, int n) 
        int i, total = 1; 
          
        for ( i = 2; i <= (n + 1); i++)
        {
            total += i;
            total -= a[i - 2];
        }
        return total; 
      
    // Driver Code
    public static void Main() 
    {
        int[] arr = {1, 2, 3, 5};
        Console.Write(getMissingNo(arr, (arr.Length)));
      
        // Console.Write(getMissingNo(arr, 4));
    }
    }
    // This code is contributed by SoumikMondal

    chevron_right

    
    

  • Compelxity Analysis:
    • Time Complexity: O(n).
      Only one traversal of array is needed.
    • Space Complexity:O(1).
      No extra space is needed

Thanks to Sahil Rally for suggesting this improvement.

Method 2: This method uses the technique of XOR to solve the problem.

  • Approach:
    XOR has certain properties

    • Assume a1 ^ a2 ^ a3 ^ …^ an = a and a1 ^ a2 ^ a3 ^ …^ an-1 = b
    • Then a ^ b = an

    Using this property, the missing element can be found. Calculate XOR of all the natural number from 1 to n and store it as a. Now calculate XOR of all the elements of the array and store it as b. The missing number will be a ^ b.
    ^ is XOR operator.

  • Algorithm:
    1. Create two variables a = 0 and b = 0
    2. Run a loop from 1 to n with i as counter.
    3. For every index update a as a = a ^ i
    4. Now traverse the array from start to end.
    5. For every index update b as b = b ^ array[i]
    6. Print the missing number as a ^ b.
  • Implementation:

    C++

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <bits/stdc++.h>
    using namespace std;
      
    // Function to get the missing number
    int getMissingNo(int a[], int n)
    {
        // For xor of all the elements in array
        int x1 = a[0];
      
        // For xor of all the elements from 1 to n+1
        int x2 = 1;
      
        for (int i = 1; i < n; i++)
            x1 = x1 ^ a[i];
      
        for (int i = 2; i <= n + 1; i++)
            x2 = x2 ^ i;
      
        return (x1 ^ x2);
    }
      
    // Driver Code
    int main()
    {
        int arr[] = { 1, 2, 4, 5, 6 };
        int n = sizeof(arr) / sizeof(arr[0]);
        int miss = getMissingNo(arr, n);
        cout << miss;
    }

    chevron_right

    
    

    C

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    #include <stdio.h>
      
    /* getMissingNo takes array and size of array as arguments*/
    int getMissingNo(int a[], int n)
    {
        int i;
        int x1 = a[0]; /* For xor of all the elements in array */
        int x2 = 1; /* For xor of all the elements from 1 to n+1 */
      
        for (i = 1; i < n; i++)
            x1 = x1 ^ a[i];
      
        for (i = 2; i <= n + 1; i++)
            x2 = x2 ^ i;
      
        return (x1 ^ x2);
    }
      
    /*program to test above function */
    int main()
    {
        int a[] = { 1, 2, 4, 5, 6 };
        int miss = getMissingNo(a, 5);
        printf("%d", miss);
        getchar();
    }

    chevron_right

    
    

    Java

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // Java program to find missing Number
    // using xor
    class Main {
        // Function to find missing number
        static int getMissingNo(int a[], int n)
        {
            int x1 = a[0];
            int x2 = 1;
      
            /* For xor of all the elements 
               in array */
            for (int i = 1; i < n; i++)
                x1 = x1 ^ a[i];
      
            /* For xor of all the elements 
               from 1 to n+1 */
            for (int i = 2; i <= n + 1; i++)
                x2 = x2 ^ i;
      
            return (x1 ^ x2);
        }
      
        /* program to test above function */
        public static void main(String args[])
        {
            int a[] = { 1, 2, 4, 5, 6 };
            int miss = getMissingNo(a, 5);
            System.out.println(miss);
        }
    }

    chevron_right

    
    

    Python3

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    # Python3 program to find
    # the mising Number
    # getMissingNo takes list as argument 
      
    def getMissingNo(a, n):
        x1 = a[0]
        x2 = 1
          
        for i in range(1, n):
            x1 = x1 ^ a[i]
              
        for i in range(2, n + 2):
            x2 = x2 ^ i
          
        return x1 ^ x2
      
      
    # Driver program to test above function
    if __name__=='__main__':
      
        a = [1, 2, 4, 5, 6]
        n = len(a)
        miss = getMissingNo(a, n) 
        print(miss)
          
    # This code is contributed by Yatin Gupta 

    chevron_right

    
    

    C#

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    // C# program to find missing Number
    // using xor
    using System;
      
    class GFG {
        // Function to find missing number
        static int getMissingNo(int[] a, int n)
        {
            int x1 = a[0];
            int x2 = 1;
      
            /* For xor of all the elements 
            in array */
            for (int i = 1; i < n; i++)
                x1 = x1 ^ a[i];
      
            /* For xor of all the elements 
            from 1 to n+1 */
            for (int i = 2; i <= n + 1; i++)
                x2 = x2 ^ i;
      
            return (x1 ^ x2);
        }
      
        /* driver program to test above function */
        public static void Main()
        {
            int[] a = { 1, 2, 4, 5, 6 };
            int miss = getMissingNo(a, 5);
            Console.Write(miss);
        }
    }
      
    // This code is contributed by Sam007_

    chevron_right

    
    

    PHP

    filter_none

    edit
    close

    play_arrow

    link
    brightness_4
    code

    <?php
    // PHP program to find
    // the Misiing Number
    // getMissingNo takes array and 
    // size of array as arguments
    function getMissingNo($a, $n)
    {
        // For xor of all the
        // elements in array 
        $x1 = $a[0]; 
          
        // For xor of all the 
        // elements from 1 to n + 1
        $x2 = 1; 
          
        for ($i = 1; $i < $n; $i++)
            $x1 = $x1 ^ $a[$i];
                  
        for ($i = 2; $i <= $n + 1; $i++)
            $x2 = $x2 ^ $i;     
          
        return ($x1 ^ $x2);
    }
      
    // Driver Code
    $a = array(1, 2, 4, 5, 6);
    $miss = getMissingNo($a, 5);
    echo($miss);
      
    // This code is contributed by Ajit.
    ?>

    chevron_right

    
    


    Output:

    3
  • Complexity Analysis:
    • Time Complexity: O(n).
      Only one traversal of array is needed.
    • Space Complexity: O(1).
      No extra space is needed.

Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

GeeksforGeeks has prepared a complete interview preparation course with premium videos, theory, practice problems, TA support and many more features. Please refer Placement 100 for details




My Personal Notes arrow_drop_up