Find four missing numbers in an array containing elements from 1 to N in Python


Suppose we have an array of distinct numbers where each number lies in the range [1, N], the array size is (N-4) and no single element is repeated. So, we can understand four numbers, from 1 to N, are missing in the array. We have to find these 4 missing numbers in sorted manner.

So, if the input is like A =[2, 8, 4, 13, 6, 11, 9, 5, 10], then the output will be [1, 3, 7, 12]

To solve this, we will follow these steps −

  • temp_arr := an array of size 4 with all 0s

  • for i in range 0 to size of A, do

    • temp := |A[i]|

    • if temp <= size of A , then

      • A[temp - 1] := A[temp - 1] *(-1)

    • otherwise when temp > size of A , then

      • if temp mod size of A is non-zero, then

        • temp_arr[temp mod size of A - 1] := -1

      • otherwise,

        • temp_arr[(temp mod size of A) +size of A - 1] := -1

  • for i in range 0 to size of A, do

    • if A[i] > 0, then

      • display i + 1

  • for i in range 0 to size of temp_arr, do

    • if temp_arr[i] >= 0, then

      • display size of A + i + 1

Example

Let us see the following implementation to get better understanding −

 Live Demo

def find_missing_nums(A) :
   temp_arr = [0]*4
   for i in range(0,len(A)) :
      temp = abs(A[i])
      if (temp <= len(A)) :
         A[temp - 1] = A[temp - 1] * (-1)
      elif (temp > len(A)) :
         if (temp % len(A)) :
            temp_arr[temp % len(A) - 1] = -1
         else :
            temp_arr[(temp % len(A)) +len(A) - 1] = -1
   for i in range(0, len(A) ) :
      if (A[i] > 0) :
         print((i + 1) , end=" ")
   for i in range(0, len(temp_arr)) :
      if (temp_arr[i] >= 0) :
         print((len(A) + i + 1) , end=" ")
A = [2, 8, 4, 13, 6, 11, 9, 5, 10]
find_missing_nums(A)

Input

[2, 8, 4, 13, 6, 11, 9, 5, 10]

Output

1 3 7 12

Updated on: 25-Aug-2020

133 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements