Minimum distance between peak elements in a given array
Last Updated :
14 Jan, 2022
Given an array arr[], the task is to find the minimum distance between the two peak elements in the given array.
Examples:
Input: arr[] = {2, 3, 1, 2, 4, 1, 2}
Output: 2
Explanation: The peak elements in the given array are {2, 3, 1, 2, 4, 1, 2}. Hence the distance between 4 and 2 is (6 – 4) = 2 which is the minimum possible.
Input: arr[] = {1, 2}
Output: -1
Explanation: There is only one peak element in the given array.
Approach: The given problem can be solved by observing the fact that for the distance to be minimum, only the distances of the adjacent peak elements is needed to be considered. Therefore, iterate the given array and for each peak element, calculate its distance from the last found peak element whose index can be maintained in a variable idx. The minimum of all these distances is the required answer.
Below is the implementation of the above approach:
C++
#include <bits/stdc++.h>
using namespace std;
void MinimumDistance( int arr[], int n)
{
int mn = INT_MAX;
int idx = -1;
if (arr[0] >= arr[1]) {
idx = 0;
}
for ( int i = 1; i < n - 1; i++) {
if (arr[i] >= arr[i - 1]
&& arr[i] >= arr[i + 1]) {
if (idx == -1) {
idx = i;
}
else {
mn = min(mn, i - idx);
}
idx = i;
}
}
if (arr[n - 1] >= arr[n - 2] && idx != -1) {
mn = min(mn, n - 1 - idx);
}
if (mn == INT_MAX)
cout << -1;
else
cout << mn;
}
int main()
{
int arr[] = { 2, 3, 1, 2, 4, 1, 2 };
int n = sizeof (arr) / sizeof (arr[0]);
MinimumDistance(arr, n);
return 0;
}
|
Java
import java.io.*;
import java.util.*;
class GFG {
public static void MinimumDistance( int [] arr)
{
int min = Integer.MAX_VALUE;
int idx = - 1 ;
int n = arr.length;
if (arr[ 0 ] >= arr[ 1 ]) {
idx = 0 ;
}
for ( int i = 1 ; i < n - 1 ; i++) {
if (arr[i] >= arr[i - 1 ]
&& arr[i] >= arr[i + 1 ]) {
if (idx == - 1 ) {
idx = i;
}
else {
min = Math.min(min, i - idx);
}
idx = i;
}
}
if (arr[n - 1 ] >= arr[n - 2 ] && idx != - 1 ) {
min = Math.min(min, n - 1 - idx);
}
if (min == Integer.MAX_VALUE)
System.out.println(- 1 );
else
System.out.println(min);
}
public static void main(String[] args)
{
int arr[] = { 2 , 3 , 1 , 2 , 4 , 1 , 2 };
MinimumDistance(arr);
}
}
|
Python3
def MinimumDistance(arr):
less = 10 * * 9 ;
idx = - 1 ;
n = len (arr);
if (arr[ 0 ] > = arr[ 1 ]):
idx = 0 ;
for i in range ( 1 , n - 1 ):
if (arr[i] > = arr[i - 1 ] and arr[i] > = arr[i + 1 ]):
if (idx = = - 1 ):
idx = i;
else :
less = min (less, i - idx);
idx = i;
if (arr[n - 1 ] > = arr[n - 2 ] and idx ! = - 1 ):
less = min (less, n - 1 - idx);
if (less = = 10 * * 9 ):
print ( - 1 );
else :
print (less);
arr = [ 2 , 3 , 1 , 2 , 4 , 1 , 2 ];
MinimumDistance(arr);
|
C#
using System;
class GFG
{
public static void MinimumDistance( int [] arr)
{
int min = int .MaxValue;
int idx = -1;
int n = arr.Length;
if (arr[0] >= arr[1])
{
idx = 0;
}
for ( int i = 1; i < n - 1; i++)
{
if (arr[i] >= arr[i - 1]
&& arr[i] >= arr[i + 1])
{
if (idx == -1)
{
idx = i;
}
else
{
min = Math.Min(min, i - idx);
}
idx = i;
}
}
if (arr[n - 1] >= arr[n - 2] && idx != -1)
{
min = Math.Min(min, n - 1 - idx);
}
if (min == int .MaxValue)
Console.Write(-1);
else
Console.Write(min);
}
public static void Main()
{
int [] arr = { 2, 3, 1, 2, 4, 1, 2 };
MinimumDistance(arr);
}
}
|
Javascript
<script>
function MinimumDistance(arr) {
let min = Number.MAX_SAFE_INTEGER;
let idx = -1;
let n = arr.length;
if (arr[0] >= arr[1]) {
idx = 0;
}
for (let i = 1; i < n - 1; i++) {
if (arr[i] >= arr[i - 1]
&& arr[i] >= arr[i + 1]) {
if (idx == -1) {
idx = i;
}
else {
min = Math.min(min, i - idx);
}
idx = i;
}
}
if (arr[n - 1] >= arr[n - 2] && idx != -1) {
min = Math.min(min, n - 1 - idx);
}
if (min == Number.MAX_SAFE_INTEGER)
document.write(-1);
else
document.write(min);
}
let arr = [2, 3, 1, 2, 4, 1, 2];
MinimumDistance(arr);
</script>
|
Time Complexity: O(N)
Auxiliary Space: O (1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...