Find the Missing Number in a sorted array - GeeksforGeeks

06 May, 2022
Given a list of n-1 integers and these integers are in the range of 1 to n. There are no duplicates in list. One of the integers is missing in the list. Write an efficient code to find the missing integer. 
Examples: 
Input : arr[] = [1, 2, 3, 4, 6, 7, 8]Output : 5
Input : arr[] = [1, 2, 3, 4, 5, 6, 8, 9]Output : 7
Naive approach: One Simple solution is to apply methods discussed for finding the missing element in an unsorted array. Time complexity of this solution is O(n).
Efficient approach: It is based on the divide and conquer algorithm that we have seen in binary search, the concept behind this solution is that the elements appearing before the missing element will have ar[i] – i = 1 and those appearing after the missing element will have ar[i] – i = 2.
Below is the implementation of the above approach:
C++
Java
Python3
C#
PHP
Javascript
// A binary search based program to find the// only missing number in a sorted array of// distinct elements within limited range.#include <iostream>using namespace std; int search(int ar[], int size){    // Extreme cases    if (ar[0] != 1)        return 1;    if (ar[size - 1] != (size + 1))        return size + 1;     int a = 0, b = size - 1;    int mid;    while ((b - a) > 1) {        mid = (a + b) / 2;        if ((ar[a] - a) != (ar[mid] - mid))            b = mid;        else if ((ar[b] - b) != (ar[mid] - mid))            a = mid;    }    return (ar[a] + 1);} int main(){    int ar[] = { 1, 2, 3, 4, 5, 6, 8 };    int size = sizeof(ar) / sizeof(ar[0]);    cout << "Missing number:" << search(ar, size);} // This code is contributed by Pushpesh Raj
// A binary search based program// to find the only missing number// in a sorted array of distinct// elements within limited range.import java.io.*; class GFG {    static int search(int ar[], int size)    {        // Extreme cases        if (ar[0] != 1)            return 1;        if (ar[size - 1] != (size + 1))            return size + 1;         int a = 0, b = size - 1;        int mid = 0;        while ((b - a) > 1) {            mid = (a + b) / 2;            if ((ar[a] - a) != (ar[mid] - mid))                b = mid;            else if ((ar[b] - b) != (ar[mid] - mid))                a = mid;        }        return (ar[a] + 1);    }     // Driver Code    public static void main(String[] args)    {        int ar[] = { 1, 2, 3, 4, 5, 6, 8 };        int size = ar.length;        System.out.println("Missing number: "                           + search(ar, size));    }} // This code is contributed// by inder_verma.
# A binary search based program to find# the only missing number in a sorted# in a sorted array of distinct elements# within limited range  def search(ar, size):   # Extreme cases    if(ar[0] != 1):        return 1    if(ar[size-1] != (size+1)):        return size+1     a = 0    b = size - 1    mid = 0    while b > a + 1:        mid = (a + b) // 2        if (ar[a] - a) != (ar[mid] - mid):            b = mid        elif (ar[b] - b) != (ar[mid] - mid):            a = mid    return ar[a] + 1  # Driver Codea = [1, 2, 3, 4, 5, 6, 8]n = len(a) print("Missing number:", search(a, n)) # This code is contributed# by Mohit Kumar
// A binary search based program// to find the only missing number// in a sorted array of distinct// elements within limited range.using System; class GFG {    static int search(int[] ar, int size)    {        // Extreme cases        if (ar[0] != 1)            return 1;        if (ar[size - 1] != (size + 1))            return size + 1;         int a = 0, b = size - 1;        int mid = 0;        while ((b - a) > 1) {            mid = (a + b) / 2;            if ((ar[a] - a) != (ar[mid] - mid))                b = mid;            else if ((ar[b] - b) != (ar[mid] - mid))                a = mid;        }        return (ar[a] + 1);    }     // Driver Code    static public void Main(String[] args)    {        int[] ar = { 1, 2, 3, 4, 5, 6, 8 };        int size = ar.Length;        Console.WriteLine("Missing number: "                          + search(ar, size));    }} // This code is contributed// by Arnab Kundu
<?php// A binary search based program to find the// only missing number in a sorted array of// distinct elements within limited range. function search($ar, $size){   //Extreme cases    if($ar[0]!=1)        return 1;    if($ar[$size-1]!=($size+1))        return $size+1;       $a = 0;    $b = $size - 1;    $mid;    while (($b - $a) > 1)    {        $mid = (int)(($a + $b) / 2);        if (($ar[$a] - $a) != ($ar[$mid] -                                   $mid))            $b = $mid;        else if (($ar[$b] - $b) != ($ar[$mid] -                                        $mid))            $a = $mid;    }    return ($ar[$a] + 1);} // Driver Code$ar = array(1, 2, 3, 4, 5, 6, 8 );$size = sizeof($ar);echo "Missing number: ",     search($ar, $size); // This code is contributed by ajit.?>
<script>// A binary search based program// to find the only missing number// in a sorted array of distinct// elements within limited range. function findMissing(arr) {  var size = arr.length; //Extreme cases    if(ar[0]!=1)        return 1;    if(ar[size-1]!=(size+1))        return size+1;           var low = 0;  var high = arr.length;  while (low <= high) {    var mid = Math.floor((low+high)/2);    if ((arr[mid]-mid === 1) && (arr[mid+1]-(mid+1) === 2)) return arr[mid]+1;    if (arr[mid]-mid === 1) {      low = mid+1;    } else {      high = mid-1;    }  }  return -1;} // Driver Code let ar = [1, 2, 3, 4, 5, 6, 8];document.write("Missing number: " +findMissing(ar)); // This code is contributed by mohit kumar 29.</script>
Missing number:7
Time Complexity: O(log(N)), where N is the length of given arrayAuxiliary Space: O(1)
inderDuMCA
andrew1234
mohit kumar 29
jit_t
ryan1219
hitesh aleriya
pushpeshrajdx01
Binary Search
limited-range-elements
Divide and Conquer
Searching
Searching
Divide and Conquer
Binary Search
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program for Tower of Hanoi
Divide and Conquer Algorithm | Introduction
Median of two sorted arrays of different sizes
Write a program to calculate pow(x,n)
Count number of occurrences (or frequency) in a sorted array
Linear Search
K'th Smallest/Largest Element in Unsorted Array | Set 1
Program to find largest element in an array
Given an array of size n and a number k, find all elements that appear more than n/k times
k largest(or smallest) elements in an array