# Check if an array is Wave Array

• Difficulty Level : Medium
• Last Updated : 15 Sep, 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, arr[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 ``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 = ``false``;` `    ``/* 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

 ` ``\$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

 ``

Output

`YES`

Time Complexity: O(n)

Auxiliary Space: O(1)

My Personal Notes arrow_drop_up