Skip to content
Related Articles

Related Articles

Check if an array is Wave Array

View Discussion
Improve Article
Save Article
Like Article
  • Difficulty Level : Medium
  • Last Updated : 21 Jun, 2022

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

Time Complexity: O(n)

Auxiliary Space: O(1)


My Personal Notes arrow_drop_up
Recommended Articles
Page :

Start Your Coding Journey Now!