给定一个由 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] 大于其左右元素,则此模式将跟随其他元素。
- Else 如果 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
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。