Skip to content
Related Articles

Related Articles

Check if an array is Wave Array
  • Difficulty Level : Easy
  • Last Updated : 07 Dec, 2018

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


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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :