📜  检查数组是否为Wave Array

📅  最后修改于: 2021-04-23 22:20:56             🧑  作者: Mango

给定一个由N个正整数组成的数组。任务是检查数组是否以波形形式排序。
例子

Input: arr[] = {1, 2, 3, 4, 5}
Output: NO

Input: arr[] = {1, 5, 3, 7, 2, 8, 6}
Output: YES

方法:

  • 首先检查索引1处的元素,即A [1]并观察模式。
  • 如果arr [1]大于其左元素和右元素,则此模式后面将跟随其他元素。
  • 否则,如果arr [1]小于其左元素和右元素,则此模式后面将跟随其他元素。
  • 检查上述步骤中发现的相同模式。如果在任何时候违反此规则,则返回false,否则返回true。

下面是上述方法的实现:

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 = 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
 $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


输出:
YES