Check if an array is Wave Array - GeeksforGeeks

01 Apr, 2021
Given an array of N positive integers. The task is to check if the array is sorted in wave form.Examples:  
Input: arr[] = {1, 2, 3, 4, 5}
Output: NO

Input: arr[] = {1, 5, 3, 7, 2, 8, 6}
Output: YES
 
Approach:  
First check the element at index 1, i.e, A[1] and observe the pattern.
If arr[1] is greater than its left and right element, then this pattern will be followed by other elements.
Else If arr[1] is smaller than its left and right element, then this pattern will be followed by other elements.
Check for the same pattern found from above steps. If at any point, this rule violates, return false, else return true.
Below is the implementation of above approach: 
C++
Java
Python 3
C#
PHP
Javascript
// CPP code to check if the array is wave array#include <iostream>using namespace std; // Function to check if array is wave array// arr : input array// n : size of arraybool isWaveArray(int arr[], int n){     bool result = true;     /* Check the wave form    * If arr[1] is greater than left and right    * Same pattern will be followed by whole    * elements, else reverse pattern    * will be followed by array elements    */    if (arr[1] > arr[0] && arr[1] > arr[2]) {        for (int i = 1; i < n - 1; i += 2) {             if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) {                result = true;            }            else {                result = false;                break;            }        }         // Check for last element        if (result == true && n % 2 == 0) {            if (arr[n - 1] <= arr[n - 2]) {                result = false;            }        }    }    else if (arr[1] < arr[0] && arr[1] < arr[2]) {        for (int i = 1; i < n - 1; i += 2) {             if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) {                result = true;            }            else {                result = false;                break;            }        }         // Check for last element        if (result == true && n % 2 == 0) {            if (arr[n - 1] >= arr[n - 2]) {                result = false;            }        }    }     return result;} // Driver Codeint main(){     // Array    int arr[] = { 1, 3, 2, 4 };     int n = sizeof(arr) / sizeof(int);     if (isWaveArray(arr, n)) {        cout << "YES" << endl;    }    else {        cout << "NO" << endl;    }     return 0;}
// Java code to check if the array is wave array  public class GFG {         // Function to check if array is wave array    // arr : input array    // n : size of array    static boolean isWaveArray(int arr[], int n)    {               boolean result = true;               /* Check the wave form        * If arr[1] is greater than left and right        * Same pattern will be followed by whole         * elements, else reverse pattern        * will be followed by array elements        */        if (arr[1] > arr[0] && arr[1] > arr[2]) {            for (int i = 1; i < n - 1; i += 2) {                       if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) {                    result = true;                }                else {                    result = false;                    break;                }            }                   // Check for last element            if (result == true && n % 2 == 0) {                if (arr[n - 1] <= arr[n - 2]) {                    result = false;                }            }        }        else if (arr[1] < arr[0] && arr[1] < arr[2]) {            for (int i = 1; i < n - 1; i += 2) {                       if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) {                    result = true;                }                else {                    result = false;                    break;                }            }                   // Check for last element            if (result == true && n % 2 == 0) {                if (arr[n - 1] >= arr[n - 2]) {                    result = false;                }            }        }               return result;    }         // Driver code    public static void main(String args[])    {          int arr[] = { 1, 3, 2, 4 };                       int n = arr.length;                       if (isWaveArray(arr, n)) {                System.out.println("YES");            }            else {                System.out.println("NO");            }          }    // This Code is contributed by ANKITRAI1}
# Python 3 code to check if# the array is wave array # Function to check if# array is wave array# arr : input array# n : size of arraydef isWaveArray(arr , n):     result = True     # Check the wave form    # If arr[1] is greater than    # left and right. Same pattern    # will be followed by whole    # elements, else reverse pattern    # will be followed by array elements         if (arr[1] > arr[0] and arr[1] > arr[2]):        for i in range(1, n - 1, 2):             if (arr[i] > arr[i - 1] and                arr[i] > arr[i + 1]):                result = True                     else :                result = False                break         # Check for last element        if (result == True and n % 2 == 0):            if (arr[n - 1] <= arr[n - 2]) :                result = False                 elif (arr[1] < arr[0] and          arr[1] < arr[2]) :        for i in range(1, n - 1, 2) :             if (arr[i] < arr[i - 1] and                arr[i] < arr[i + 1]):                result = True                         else :                result = False                break         # Check for last element        if (result == True and n % 2 == 0) :            if (arr[n - 1] >= arr[n - 2]) :                result = False     return result # Driver Codeif __name__ == "__main__":     # Array    arr = [ 1, 3, 2, 4 ]     n = len(arr)     if (isWaveArray(arr, n)):        print("YES")    else:        print("NO") # This code is contributed# by ChitraNayal
// C# code to check if the// array is wave arrayusing System; class GFG{ // Function to check if array// is wave array// arr : input array// n : size of arraystatic bool isWaveArray(int []arr, int n){     bool result = true;     /* Check the wave form    * If arr[1] is greater than left    * and right. Same pattern will be    * followed by whole elements, else    * reverse pattern will be followed      by array elements */    if (arr[1] > arr[0] && arr[1] > arr[2])    {        for (int i = 1; i < n - 1; i += 2)        {             if (arr[i] > arr[i - 1] &&                arr[i] > arr[i + 1])            {                result = true;            }            else            {                result = false;                break;            }        }         // Check for last element        if (result == true && n % 2 == 0)        {            if (arr[n - 1] <= arr[n - 2])            {                result = false;            }        }    }    else if (arr[1] < arr[0] &&             arr[1] < arr[2])    {        for (int i = 1; i < n - 1; i += 2)        {             if (arr[i] < arr[i - 1] &&                arr[i] < arr[i + 1])            {                result = true;            }            else            {                result = false;                break;            }        }         // Check for last element        if (result == true && n % 2 == 0)        {            if (arr[n - 1] >= arr[n - 2])            {                result = false;            }        }    }     return result;} // Driver codepublic static void Main(){    int []arr = { 1, 3, 2, 4 };     int n = arr.Length;     if (isWaveArray(arr, n))    {        Console.WriteLine("YES");    }    else    {        Console.WriteLine("NO");    }}} // This code is contributed// by inder_verma
<?php// PHP code to check if the array is wave array // Function to check if array is wave array// arr : input array// n : size of arrayfunction isWaveArray( $arr, $n){     $result = true;     /* Check the wave form    * If arr[1] is greater than left and right    * Same pattern will be followed by whole    * elements, else reverse pattern    * will be followed by array elements    */    if ($arr[1] > $arr[0] &&        $arr[1] > $arr[2])    {        for ( $i = 1; $i < ($n - 1); $i += 2)        {             if ($arr[$i] > $arr[$i - 1] &&                $arr[$i] > $arr[$i + 1])            {                $result = true;            }            else            {                $result = false;                break;            }        }         // Check for last element        if ($result == true && $n % 2 == 0)        {            if ($arr[$n - 1] <= $arr[$n - 2])            {                $result = false;            }        }    }    else if ($arr[1] < $arr[0] &&             $arr[1] < $arr[2])    {        for ($i = 1; $i < $n - 1; $i += 2)        {             if ($arr[$i] < $arr[$i - 1] &&                $arr[$i] < $arr[$i + 1])            {                $result = true;            }            else            {                $result = false;                break;            }        }         // Check for last element        if ($result == true && $n % 2 == 0)        {            if ($arr[$n - 1] >= $arr[$n - 2])            {                $result = false;            }        }    }     return $result;} // Driver Code // Array$arr = array (1, 3, 2, 4 );$n = sizeof($arr);if (isWaveArray($arr, $n)){    echo "YES";}else{    echo "NO";} // This code is contributed by jit_t?>
<script>    // Javascript code to check if the array is wave array         // Function to check if array is wave array    // arr : input array    // n : size of array    function isWaveArray(arr, n)    {         let result = true;         /* Check the wave form        * If arr[1] is greater than left and right        * Same pattern will be followed by whole        * elements, else reverse pattern        * will be followed by array elements        */        if (arr[1] > arr[0] && arr[1] > arr[2]) {            for (let i = 1; i < n - 1; i += 2) {                 if (arr[i] > arr[i - 1] && arr[i] > arr[i + 1]) {                    result = true;                }                else {                    result = false;                    break;                }            }             // Check for last element            if (result == true && n % 2 == 0) {                if (arr[n - 1] <= arr[n - 2]) {                    result = false;                }            }        }        else if (arr[1] < arr[0] && arr[1] < arr[2]) {            for (let i = 1; i < n - 1; i += 2) {                 if (arr[i] < arr[i - 1] && arr[i] < arr[i + 1]) {                    result = true;                }                else {                    result = false;                    break;                }            }             // Check for last element            if (result == true && n % 2 == 0) {                if (arr[n - 1] >= arr[n - 2]) {                    result = false;                }            }        }         return result;    }     // Array    let arr = [ 1, 3, 2, 4 ];       let n = arr.length;       if (isWaveArray(arr, n)) {        document.write("YES");    }    else {        document.write("NO");    }                 // This code is contributed by divyeshrabadiya07.</script>
YES
 
ankthon
ukasp
inderDuMCA
jit_t
divyeshrabadiya07
Arrays
Greedy
Arrays
Greedy
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Next Greater Element
Window Sliding Technique
Count pairs with given sum
Program to find sum of elements in a given array
Reversal algorithm for array rotation
Dijkstra's shortest path algorithm | Greedy Algo-7
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Huffman Coding | Greedy Algo-3
Write a program to print all permutations of a given string