Missing occurrences of a number in an array such that maximum absolute difference of adjacent elements is minimum
Given an array arr[] of some positive integers and missing occurrence of a specific integer represented by -1, the task is to find that missing number such that maximum absolute difference between adjacent elements is minimum.
Examples:
Input: arr[] = {-1, 10, -1, 12, -1}
Output: 11
Explanation:
Differences of Adjacent elements –
=> a[0] – a[1] = 11 – 10 = 1
=> a[2] – a[1] = 11 – 10 = 1
=> a[3] – a[2] = 12 – 11 = 1
=> a[3] – a[4] = 12 – 11 = 1
Maximum absolute difference of adjacent elements – 2
Input: arr[] = {1,-1, 7, 5, 2, -1, 5}
Output: 4
Explanation:
Differences of Adjacent elements –
=> a[1] – a[0] = 4 – 1 = 3
=> a[2] – a[1] = 7 – 4 = 3
=> a[2] – a[3] = 7 – 5 = 2
=> a[3] – a[4] = 5 – 2 = 3
=> a[5] – a[4] = 4 – 2 = 2
=> a[6] – a[5] = 5 – 4 = 1
Maximum absolute difference of adjacent elements – 3
Approach: The idea is to find the maximum and minimum adjacent element to the missing number and the missing number can be the average of these two values such that maximum absolute difference is minimum.
=> max = Maximum adjacent element
=> min = Minimum adjacent element
Missing number = (max + min)
-------------
2
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
int missingnumber( int n, int arr[])
{
int mn = INT_MAX, mx = INT_MIN;
for ( int i = 0; i < n; i++) {
if (i > 0 && arr[i] == -1 &&
arr[i - 1] != -1) {
mn = min(mn, arr[i - 1]);
mx = max(mx, arr[i - 1]);
}
if (i < (n - 1) && arr[i] == -1 &&
arr[i + 1] != -1) {
mn = min(mn, arr[i + 1]);
mx = max(mx, arr[i + 1]);
}
}
long long int res = (mx + mn) / 2;
return res;
}
int main()
{
int n = 5;
int arr[5] = { -1, 10, -1,
12, -1 };
int ans = 0;
int res = missingnumber(n, arr);
cout << res;
return 0;
}
|
Java
import java.util.*;
class GFG{
static int missingnumber( int n, int arr[])
{
int mn = Integer.MAX_VALUE,
mx = Integer.MIN_VALUE;
for ( int i = 0 ; i < n; i++)
{
if (i > 0 && arr[i] == - 1 &&
arr[i - 1 ] != - 1 )
{
mn = Math.min(mn, arr[i - 1 ]);
mx = Math.max(mx, arr[i - 1 ]);
}
if (i < (n - 1 ) && arr[i] == - 1 &&
arr[i + 1 ] != - 1 )
{
mn = Math.min(mn, arr[i + 1 ]);
mx = Math.max(mx, arr[i + 1 ]);
}
}
int res = (mx + mn) / 2 ;
return res;
}
public static void main(String[] args)
{
int n = 5 ;
int arr[] = { - 1 , 10 , - 1 ,
12 , - 1 };
int res = missingnumber(n, arr);
System.out.print(res);
}
}
|
Python3
import sys
def missingnumber(n, arr) - > int :
mn = sys.maxsize;
mx = - sys.maxsize - 1 ;
for i in range (n):
if (i > 0 and arr[i] = = - 1 and
arr[i - 1 ] ! = - 1 ):
mn = min (mn, arr[i - 1 ]);
mx = max (mx, arr[i - 1 ]);
if (i < (n - 1 ) and arr[i] = = - 1 and
arr[i + 1 ] ! = - 1 ):
mn = min (mn, arr[i + 1 ]);
mx = max (mx, arr[i + 1 ]);
res = (mx + mn) / 2 ;
return res;
if __name__ = = '__main__' :
n = 5 ;
arr = [ - 1 , 10 , - 1 , 12 , - 1 ];
res = missingnumber(n, arr);
print (res);
|
C#
using System;
class GFG{
static int missingnumber( int n, int []arr)
{
int mn = Int32.MaxValue,
mx = Int32.MinValue;
for ( int i = 0; i < n; i++)
{
if (i > 0 && arr[i] == -1 &&
arr[i - 1] != -1)
{
mn = Math.Min(mn, arr[i - 1]);
mx = Math.Max(mx, arr[i - 1]);
}
if (i < (n - 1) && arr[i] == -1 &&
arr[i + 1] != -1)
{
mn = Math.Min(mn, arr[i + 1]);
mx = Math.Max(mx, arr[i + 1]);
}
}
int res = (mx + mn) / 2;
return res;
}
public static void Main()
{
int n = 5;
int []arr = new int []{ -1, 10, -1, 12, -1 };
int res = missingnumber(n, arr);
Console.WriteLine(res);
}
}
|
Javascript
<script>
function missingnumber(n, arr)
{
let mn = 10000;
let mx = -10000;
for (let i = 0; i < n; i++)
{
if (i > 0 && arr[i] == -1 && arr[i - 1] != -1)
{
mn = Math.min(mn, arr[i - 1]);
mx = Math.max(mx, arr[i - 1]);
}
if (i < (n - 1) && arr[i] == -1 &&
arr[i + 1] != -1)
{
mn = Math.min(mn, arr[i + 1]);
mx = Math.max(mx, arr[i + 1]);
}
}
let res = (mx + mn) / 2;
return res;
}
let n = 5;
let arr = [-1, 10, -1, 12, -1];
let res = missingnumber(n, arr);
document.write(res);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
19 May, 2021
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...