Number of local extrema in an array

You are given an array on n-elements. An extrema is an elements which is either greater than its both of neighbors or less than its both neighbors. You have to calculate the number of local extrema in given array.
Note : 1st and last elements are not extrema.

Examples :

Input : a[] = {1, 5, 2, 5}
Output : 2

Input : a[] = {1, 2, 3}
Output : 0



Approach :For calculating number of extrema we have to check whether an element is maxima or minima i.e. whether it is greater than both of its neighbors or less than both neighbors. For this simply iterate over the array and for each elements check its possibility of being an extrema.

Note: a[0] and a[n-1] has exactly one neighbour each, they are neither minima nor maxima.

C++

filter_none

edit
close

play_arrow

link
brightness_4
code

// CPP to find number
// of extrema
#include <bits/stdc++.h>
using namespace std;
  
// function to find 
// local extremum
int extrema(int a[], int n)
{
    int count = 0;
  
    // start loop from position 1
    // till n-1
    for (int i = 1; i < n - 1; i++)
    {
  
        // only one condition
        // will be true at a  
        // time either a[i] 
        // will be greater than
        // neighbours or less 
        // than neighbours
  
        // check if a[i] is greater
        // than both its neighbours
        // then add 1 to x
        count += (a[i] > a[i - 1] && a[i] > a[i + 1]);
  
        // check if a[i] is 
        // less than both its 
        // neighbours, then 
        // add 1 to x
        count += (a[i] < a[i - 1] && a[i] < a[i + 1]);
    }
  
    return count;
}
  
// driver program
int main()
{
    int a[] = { 1, 0, 2, 1 };
    int n = sizeof(a) / sizeof(a[0]);
    cout << extrema(a, n);
    return 0;
}

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

// Java to find 
// number of extrema
import java.io.*;
  
class GFG {
      
    // function to find 
    // local extremum
    static int extrema(int a[], int n)
    {
        int count = 0;
      
        // start loop from 
        // position 1 till n-1
        for (int i = 1; i < n - 1; i++) 
        {
      
            // only one condition
            // will be true at a  
            // time either a[i] 
            // will be greater than
            // neighbours or less 
            // than neighbours
      
            // check if a[i] is greater
            // than both its neighbours
            // then add 1 to x
            if(a[i] > a[i - 1] && a[i] > a[i + 1])
                count += 1;
              
            // check if a[i] is 
            // less than both its 
            // neighbours, then 
            // add 1 to x
            if(a[i] < a[i - 1] && a[i] < a[i + 1])
                count += 1;
        }
      
        return count;
    }
      
    // driver program
    public static void main(String args[])
                            throws IOException
    {
        int a[] = { 1, 0, 2, 1 };
        int n = a.length;
        System.out.println(extrema(a, n));
    }
}
  
  
/* This code is contributed by Nikita Tiwari.*/

chevron_right


Python3

filter_none

edit
close

play_arrow

link
brightness_4
code

# Python 3 to find
# number of extrema
  
# function to find
# local extremum
def extrema(a, n):
  
    count = 0
    # start loop from
    # position 1 till n-1
    for i in range(1, n - 1) :
        # only one condition 
        # will be true 
        # at a time either
        # a[i] will be greater 
        # than neighbours or 
        # less than neighbours
  
        # check if a[i] if
        # greater than both its 
        # neighbours, then add 
        # 1 to x
        count += (a[i] > a[i - 1] and a[i] > a[i + 1]);
  
        # check if a[i] if
        # less than both its 
        # neighbours, then 
        # add 1 to x
        count += (a[i] < a[i - 1] and a[i] < a[i + 1]);
  
    return count
  
# driver program
a = [1, 0, 2, 1 ]
n = len(a)
print(extrema(a, n))
  
# This code is contributed by Smitha Dinesh Semwal

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

// C# to find 
// number of extrema
using System;
  
class GFG {
      
    // function to find 
    // local extremum
    static int extrema(int []a, int n)
    {
        int count = 0;
      
        // start loop from 
        // position 1 till n-1
        for (int i = 1; i < n - 1; i++) 
        {
      
            // only one condition
            // will be true at a 
            // time either a[i] 
            // will be greater than
            // neighbours or less 
            // than neighbours
      
            // check if a[i] is greater
            // than both its neighbours
            // then add 1 to x
            if(a[i] > a[i - 1] && a[i] > a[i + 1])
                count += 1;
              
            // check if a[i] is 
            // less than both its 
            // neighbours, then 
            // add 1 to x
            if(a[i] < a[i - 1] && a[i] < a[i + 1])
                count += 1;
        }
      
        return count;
    }
      
    // Driver program
    public static void Main()
                              
    {
        int []a = { 1, 0, 2, 1 };
        int n = a.Length;
    Console.WriteLine(extrema(a, n));
    }
}
  
  
/* This code is contributed by vt_m.*/

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

<?php
// PHP to find number
// of extrema
  
  
// function to find 
// local extremum
function extrema($a, $n)
{
    $count = 0;
  
    // start loop from position 1
    // till n-1
    for ($i = 1; $i < $n - 1; $i++)
    {
  
        // only one condition
        // will be true at a 
        // time either a[i] 
        // will be greater than
        // neighbours or less 
        // than neighbours
  
        // check if a[i] is greater
        // than both its neighbours
        // then add 1 to x
        $count += ($a[$i] > $a[$i - 1] and 
                   $a[$i] > $a[$i + 1]);
  
        // check if a[i] is 
        // less than both its 
        // neighbours, then 
        // add 1 to x
        $count += ($a[$i] < $a[$i - 1] and 
                   $a[$i] < $a[$i + 1]);
    }
  
    return $count;
}
  
// Driver Code
$a = array( 1, 0, 2, 1 );
$n = count($a);
echo extrema($a, $n);
  
// This code is contributed by anuj_67.
?>

chevron_right



Output :

2


My Personal Notes arrow_drop_up

Discovering ways to develop a plane for soaring career goals

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : vt_m



Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.