Skip to content
Related Articles

Related Articles

Improve Article

Check if an array is Wave Array

  • Difficulty Level : Easy
  • Last Updated : 01 Apr, 2021
Geek Week

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++




// 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 array
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 Code
int 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




// 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




# 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 array
def 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 Code
if __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#




// C# code to check if the
// array is wave array
using System;
 
class GFG
{
 
// Function to check if array
// is wave array
// arr : input array
// n : size of array
static 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 code
public 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
// PHP 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)
{
 
    $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
?>

Javascript




<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>
Output: 
YES

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :