Find missing element in a sorted array of consecutive numbers
Last Updated :
05 Aug, 2021
Given an array arr[] of n distinct integers. Elements are placed sequentially in ascending order with one element missing. The task is to find the missing element.
Examples:
Input: arr[] = {1, 2, 4, 5, 6, 7, 8, 9}
Output: 3
Input: arr[] = {-4, -3, -1, 0, 1, 2}
Output: -2
Input: arr[] = {1, 2, 3, 4}
Output: -1
No element is missing.
Principles:
- Look for inconsistency: Ideally, the difference between any element and its index must be arr[0] for every element.
Example,
A[] = {1, 2, 3, 4, 5} -> Consistent
B[] = {101, 102, 103, 104} -> Consistent
C[] = {1, 2, 4, 5, 6} -> Inconsistent as C[2] - 2 != C[0] i.e. 4 - 2 != 1
- Finding inconsistency helps to scan only half of the array each time in O(logN).
Algorithm
- Find middle element and check if it's consistent.
- If middle element is consistent, then check if the difference between middle element and its next element is greater than 1 i.e. check if arr[mid + 1] - arr[mid] > 1
- If yes, then arr[mid] + 1 is the missing element.
- If not, then we have to scan the right half array from the middle element and jump to step-1.
- If middle element is inconsistent, then check if the difference between middle element and its previous element is greater than 1 i.e. check if arr[mid] - arr[mid - 1] > 1
- If yes, then arr[mid] - 1 is the missing element.
- If not, then we have to scan the left half array from the middle element and jump to step-1.
Below is the implementation of the above approach:
C++
// CPP implementation of the approach
#include<bits/stdc++.h>
using namespace std;
// Function to return the missing element
int findMissing(int arr[], int n)
{
int l = 0, h = n - 1;
int mid;
while (h > l)
{
mid = l + (h - l) / 2;
// Check if middle element is consistent
if (arr[mid] - mid == arr[0])
{
// No inconsistency till middle elements
// When missing element is just after
// the middle element
if (arr[mid + 1] - arr[mid] > 1)
return arr[mid] + 1;
else
{
// Move right
l = mid + 1;
}
}
else
{
// Inconsistency found
// When missing element is just before
// the middle element
if (arr[mid] - arr[mid - 1] > 1)
return arr[mid] - 1;
else
{
// Move left
h = mid - 1;
}
}
}
// No missing element found
return -1;
}
// Driver code
int main()
{
int arr[] = { -9, -8, -7, -5, -4, -3, -2, -1, 0 };
int n = sizeof(arr)/sizeof(arr[0]);
cout << (findMissing(arr, n));
}
// This code iscontributed by
// Surendra_Gangwar
Java
// Java implementation of the approach
class GFG {
// Function to return the missing element
public static int findMissing(int arr[], int n)
{
int l = 0, h = n - 1;
int mid;
while (h > l) {
mid = l + (h - l) / 2;
// Check if middle element is consistent
if (arr[mid] - mid == arr[0]) {
// No inconsistency till middle elements
// When missing element is just after
// the middle element
if (arr[mid + 1] - arr[mid] > 1)
return arr[mid] + 1;
else {
// Move right
l = mid + 1;
}
}
else {
// Inconsistency found
// When missing element is just before
// the middle element
if (arr[mid] - arr[mid - 1] > 1)
return arr[mid] - 1;
else {
// Move left
h = mid - 1;
}
}
}
// No missing element found
return -1;
}
// Driver code
public static void main(String args[])
{
int arr[] = { -9, -8, -7, -5, -4, -3, -2, -1, 0 };
int n = arr.length;
System.out.print(findMissing(arr, n));
}
}
Python3
# Python implementation of the approach
# Function to return the missing element
def findMissing(arr, n):
l, h = 0, n - 1
mid = 0
while (h > l):
mid = l + (h - l) // 2
# Check if middle element is consistent
if (arr[mid] - mid == arr[0]):
# No inconsistency till middle elements
# When missing element is just after
# the middle element
if (arr[mid + 1] - arr[mid] > 1):
return arr[mid] + 1
else:
# Move right
l = mid + 1
else:
# Inconsistency found
# When missing element is just before
# the middle element
if (arr[mid] - arr[mid - 1] > 1):
return arr[mid] - 1
else:
# Move left
h = mid - 1
# No missing element found
return -1
# Driver code
arr = [-9, -8, -7, -5, -4, -3, -2, -1, 0 ]
n = len(arr)
print(findMissing(arr, n))
# This code is contributed
# by mohit kumar
C#
// C# implementation of the approach
using System;
class GFG
{
// Function to return the missing element
public static int findMissing(int[] arr, int n)
{
int l = 0, h = n - 1;
int mid;
while (h > l)
{
mid = l + (h - l) / 2;
// Check if middle element is consistent
if (arr[mid] - mid == arr[0])
{
// No inconsistency till middle elements
// When missing element is just after
// the middle element
if (arr[mid + 1] - arr[mid] > 1)
return arr[mid] + 1;
else
{
// Move right
l = mid + 1;
}
}
else
{
// Inconsistency found
// When missing element is just before
// the middle element
if (arr[mid] - arr[mid - 1] > 1)
return arr[mid] - 1;
else
{
// Move left
h = mid - 1;
}
}
}
// No missing element found
return -1;
}
// Driver code
public static void Main()
{
int[] arr = { -9, -8, -7, -5, -4, -3, -2, -1, 0 };
int n = arr.Length;
Console.WriteLine(findMissing(arr, n));
}
}
// This code is contributed by Code_Mech
PHP
<?php
// PHP implementation of the approach
// Function to return the missing element
function findMissing($arr, $n)
{
$l = 0; $h = $n - 1;
while ($h > $l)
{
$mid = floor($l + ($h - $l) / 2);
// Check if middle element is consistent
if ($arr[$mid] - $mid == $arr[0])
{
// No inconsistency till middle elements
// When missing element is just after
// the middle element
if ($arr[$mid + 1] - $arr[$mid] > 1)
return $arr[$mid] + 1;
else
{
// Move right
$l = $mid + 1;
}
}
else
{
// Inconsistency found
// When missing element is just before
// the middle element
if ($arr[$mid] - $arr[$mid - 1] > 1)
return $arr[$mid] - 1;
else
{
// Move left
$h = $mid - 1;
}
}
}
// No missing element found
return -1;
}
// Driver code
$arr = array( -9, -8, -7, -5, -
4, -3, -2, -1, 0 );
$n = count($arr);
echo findMissing($arr, $n);
// This code is contributed by Ryuga
?>
JavaScript
<script>
// JavaScript implementation of the approach
// Function to return the missing element
function findMissing(arr, n)
{
let l = 0, h = n - 1;
let mid;
while (h > l)
{
mid = l + Math.floor((h - l) / 2);
// Check if middle element is consistent
if (arr[mid] - mid == arr[0])
{
// No inconsistency till middle elements
// When missing element is just after
// the middle element
if (arr[mid + 1] - arr[mid] > 1)
return arr[mid] + 1;
else
{
// Move right
l = mid + 1;
}
}
else
{
// Inconsistency found
// When missing element is just before
// the middle element
if (arr[mid] - arr[mid - 1] > 1)
return arr[mid] - 1;
else
{
// Move left
h = mid - 1;
}
}
}
// No missing element found
return -1;
}
// Driver code
let arr = [ -9, -8, -7, -5, -4, -3, -2, -1, 0 ];
let n = arr.length;
document.write(findMissing(arr, n));
// This code is contributed by Surbhi Tyagi.
</script>
Time Complexity : O(log(N) )
Auxiliary Space: O(1)
Similar Reads
Count of Missing Numbers in a sorted array Given a sorted array arr[], the task is to calculate the number of missing numbers between the first and last element of the sorted array. Examples: Input: arr[] = { 1, 4, 5, 8 } Output: 4 Explanation: The missing integers in the array are {2, 3, 6, 7}. Therefore, the count is 4. Input: arr[] = {5,
9 min read
Find all ranges of consecutive numbers from Array Given a sorted array arr[] consisting of N integers without any duplicates, the task is to find the ranges of consecutive numbers from that array.Examples: Input: arr[] = {1, 2, 3, 6, 7} Output: 1->3, 6->7 Explanation: There are two ranges of consecutive number from that array. Range 1 = 1 -
10 min read
Find the only missing number in a sorted array You are given a sorted array of N integers from 1 to N with one number missing find the missing number Examples: Input :ar[] = {1, 3, 4, 5}Output : 2Input : ar[] = {1, 2, 3, 4, 5, 7, 8}Output : 6A simple solution is to linearly traverse the given array. Find the point where current element is not on
9 min read
Missing in a Sorted Array of Natural Numbers Given a sorted array arr[] of n-1 integers, these integers are in the range of 1 to n. There are no duplicates in the array. One of the integers is missing in the array. Write an efficient code to find the missing integer. Examples: Input : arr[] = [1, 2, 3, 4, 6, 7, 8]Output : 5Explanation: The mis
12 min read
Find all missing numbers from a given sorted array Given a sorted array arr[] of N integers, The task is to find the multiple missing elements in the array between the ranges [arr[0], arr[N-1]]. Examples: Input: arr[] = {6, 7, 10, 11, 13}Output: 8 9 12 Explanation: The elements of the array are present in the range of the maximum and minimum array e
13 min read
Maximum consecutive numbers present in an array Find the length of maximum number of consecutive numbers jumbled up in an array.Examples: Input : arr[] = {1, 94, 93, 1000, 5, 92, 78};Output : 3 The largest set of consecutive elements is92, 93, 94 Input : arr[] = {1, 5, 92, 4, 78, 6, 7};Output : 4 The largest set of consecutive elements is4, 5, 6,
15+ min read