Count of array elements which is smaller than both its adjacent elements
Last Updated :
20 Feb, 2022
Given an array arr[] of size N, the task is to find the number of valley points in the array.
Valley Point: Any elements of the array is known as a valley point if it is smaller than both its adjacent elements, i.e. arr[i-1] > arr[i] < arr[i+1] .
Examples:
Input: arr[] = {3, 2, 5}
Output: 1
Explanation:
There is only one valley point. That is arr[1].
Input: arr[] = {5, 4, 8, 3, 6}
Output: 2
Explanation:
There are two valley points. That is arr[1] and arr[3].
Approach: The idea is to iterate over the array from 1 to N-1 and for each element check for that element is a valley point or not if yes, then increment the count of the valley point by 1.
if (arr[i-1] > arr[i] < arr[i])
count += 1;
Below is the implementation of the above approach:
C++
// C++ program to count the number
// of valley points in the array
#include<bits/stdc++.h>
using namespace std;
// Function to count the valley points
// in the given character array
int countValleys(int n, int arr[])
{
int count = 0, temp = 0;
// Loop to iterate over the
// elements of the given array
for(int i = 1; i < n - 1; i++)
{
// Condition to check if the given
// element is a valley point
if (arr[i - 1] > arr[i] &&
arr[i] < arr[i + 1])
{
count++;
}
}
return count;
}
// Driver Code
int main()
{
int arr[] = { 3, 2, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << countValleys(n, arr);
}
// This code is contributed by Surendra_Gangwar
Java
// Java program to count the number
// of valley points in the array
import java.io.*;
class GFG {
// Function to count the valley points
// in the given character array
static int countValleys(int n, int arr[])
{
int count = 0, temp = 0;
// Loop to iterate over the elements
// of the given array
for (int i = 1; i < n - 1; i++) {
// Condition to check if the given
// element is a valley point
if (arr[i - 1] > arr[i]
&& arr[i] < arr[i + 1]) {
count++;
}
}
return count;
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 3, 2, 5 };
int n = arr.length;
System.out.println(
countValleys(n, arr));
}
}
Python3
# Python3 program to count the number
# of valley points in the array
# Function to count the valley points
# in the given character array
def countValleys(n, arr):
count = 0; temp = 0;
# Loop to iterate over the
# elements of the given array
for i in range(1, n):
# Condition to check if the given
# element is a valley point
if (arr[i - 1] > arr[i] and
arr[i] < arr[i + 1]):
count += 1;
return count;
# Driver Code
arr = [ 3, 2, 5 ];
n = len(arr);
print(countValleys(n, arr));
# This code is contributed by Code_Mech
C#
// C# program to count the number
// of valley points in the array
using System;
class GFG{
// Function to count the valley points
// in the given character array
static int countValleys(int n, int []arr)
{
int count = 0;
// Loop to iterate over the elements
// of the given array
for (int i = 1; i < n - 1; i++)
{
// Condition to check if the given
// element is a valley point
if (arr[i - 1] > arr[i] &&
arr[i] < arr[i + 1])
{
count++;
}
}
return count;
}
// Driver Code
public static void Main()
{
int []arr = { 3, 2, 5 };
int n = arr.Length;
Console.Write(countValleys(n, arr));
}
}
// This code is contributed by Code_Mech
JavaScript
<script>
// Javascript program to count the number
// of valley points in the array
// Function to count the valley points
// in the given character array
function countValleys(n, arr)
{
let count = 0, temp = 0;
// Loop to iterate over the
// elements of the given array
for(let i = 1; i < n - 1; i++)
{
// Condition to check if the given
// element is a valley point
if (arr[i - 1] > arr[i] &&
arr[i] < arr[i + 1])
{
count++;
}
}
return count;
}
// Driver Code
let arr = [ 3, 2, 5 ];
let n = arr.length;
document.write(countValleys(n, arr));
// This code is contributed by rishavmahato348
</script>
Time Complexity: O(n)
Auxiliary Space: O(1)
Explore
DSA Fundamentals
Data Structures
Algorithms
Advanced
Interview Preparation
Practice Problem