Check if an array is Wave Array

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

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Java

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Python 3

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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

chevron_right


C#

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


PHP

filter_none

edit
close

play_arrow

link
brightness_4
code

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

chevron_right


Output:

YES


My Personal Notes arrow_drop_up

Check out this Author's contributed articles.

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.



Improved By : AnkitRai01, Ita_c, inderDuMCA, jit_t



Article Tags :
Practice Tags :


1


Please write to us at contribute@geeksforgeeks.org to report any issue with the above content.