给定一个包含n 个数字的数组 arr[] ,任务是找到最长的 ZigZag 子数组的长度,使得子数组中的每个元素都应为
a < b > c < d > e < f
例子:
Input: arr[] = {12, 13, 1, 5, 4, 7, 8, 10, 10, 11}
Output: 6
Explanation:
The subarray is {12, 13, 1, 5, 4, 7} whose length is 6 and is in zigzag fashion.
Input: arr[] = {1, 2, 3, 4, 5}
Output: 2
Explanation:
The subarray is {1, 2} or {2, 3} or {4, 5} whose length is 2.
方法:解决上述问题,可按以下步骤操作:
- 最初初始化cnt ,一个计数器为 1。
- 在数组元素之间迭代,检查元素是否在表单中
a < b > c < d > e < f
- 如果为 true,则将 cnt 增加 1。如果不是形式
a < b > c < d > e < f
- 然后将 cnt 重新初始化为 1。
下面是上述方法的实现:
C++
// C++ implementation to find
// the length of longest zigzag
// subarray of the given array
#include
using namespace std;
// Function to find the length of
// longest zigZag contiguous subarray
int lenOfLongZigZagArr(int a[], int n)
{
// 'max' to store the length
// of longest zigZag subarray
int max = 1,
// 'len' to store the lengths
// of longest zigZag subarray
// at different instants of time
len = 1;
// Traverse the array from the beginning
for (int i = 0; i < n - 1; i++) {
if (i % 2 == 0
&& (a[i] < a[i + 1]))
len++;
else if (i % 2 == 1
&& (a[i] > a[i + 1]))
len++;
else {
// Check if 'max' length
// is less than the length
// of the current zigzag subarray.
// If true, then update 'max'
if (max < len)
max = len;
// Reset 'len' to 1
// as from this element,
// again the length of the
// new zigzag subarray
// is being calculated
len = 1;
}
}
// comparing the length of the last
// zigzag subarray with 'max'
if (max < len)
max = len;
// Return required maximum length
return max;
}
// Driver code
int main()
{
int arr[] = { 1, 2, 3, 4, 5 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << lenOfLongZigZagArr(arr, n);
return 0;
}
Java
// Java implementation to find
// the length of longest zigzag
// subarray of the given array
import java.io.*;
import java.util.*;
class GFG {
// Function to find the length of
// longest zigZag contiguous subarray
static int lenOfLongZigZagArr(int a[], int n)
{
// 'max' to store the length
// of longest zigZag subarray
int max = 1,
// 'len' to store the lengths
// of longest zigZag subarray
// at different instants of time
len = 1;
// Traverse the array from the beginning
for (int i = 0; i < n - 1; i++)
{
if (i % 2 == 0 && (a[i] < a[i + 1]))
len++;
else if (i % 2 == 1 && (a[i] > a[i + 1]))
len++;
else
{
// Check if 'max' length
// is less than the length
// of the current zigzag subarray.
// If true, then update 'max'
if (max < len)
max = len;
// Reset 'len' to 1
// as from this element,
// again the length of the
// new zigzag subarray
// is being calculated
len = 1;
}
}
// comparing the length of the last
// zigzag subarray with 'max'
if (max < len)
max = len;
// Return required maximum length
return max;
}
// Driver Code
public static void main(String[] args)
{
int arr[] = { 1, 2, 3, 4, 5 };
int n = arr.length;
System.out.println(lenOfLongZigZagArr(arr, n));
}
}
// This code is contributed by coder001
Python3
# Python3 implementation to find the
# length of longest zigzag subarray
# of the given array
# Function to find the length of
# longest zigZag contiguous subarray
def lenOfLongZigZagArr(a, n):
# '_max' to store the length
# of longest zigZag subarray
_max = 1
# '_len' to store the lengths
# of longest zigZag subarray
# at different instants of time
_len = 1
# Traverse the array from the beginning
for i in range(n - 1):
if i % 2 == 0 and a[i] < a[i + 1]:
_len += 1
elif i % 2 == 1 and a[i] > a[i + 1]:
_len += 1
else:
# Check if '_max' length is less than
# the length of the current zigzag
# subarray. If true, then update '_max'
if _max < _len:
_max = _len
# Reset '_len' to 1 as from this element,
# again the length of the new zigzag
# subarray is being calculated
_len = 1
# Comparing the length of the last
# zigzag subarray with '_max'
if _max < _len:
_max = _len
# Return required maximum length
return _max
# Driver code
arr = [ 1, 2, 3, 4, 5 ]
n = len(arr)
print(lenOfLongZigZagArr(arr, n))
# This code is contributed by divyamohan123
C#
// C# implementation to find
// the length of longest zigzag
// subarray of the given array
using System;
class GFG{
// Function to find the length of
// longest zigZag contiguous subarray
static int lenOflongZigZagArr(int []a, int n)
{
// 'max' to store the length
// of longest zigZag subarray
int max = 1,
// 'len' to store the lengths
// of longest zigZag subarray
// at different instants of time
len = 1;
// Traverse the array from the beginning
for(int i = 0; i < n - 1; i++)
{
if (i % 2 == 0 && (a[i] < a[i + 1]))
len++;
else if (i % 2 == 1 && (a[i] > a[i + 1]))
len++;
else
{
// Check if 'max' length
// is less than the length
// of the current zigzag subarray.
// If true, then update 'max'
if (max < len)
max = len;
// Reset 'len' to 1
// as from this element,
// again the length of the
// new zigzag subarray
// is being calculated
len = 1;
}
}
// Comparing the length of the last
// zigzag subarray with 'max'
if (max < len)
max = len;
// Return required maximum length
return max;
}
// Driver Code
public static void Main(String[] args)
{
int []arr = { 1, 2, 3, 4, 5 };
int n = arr.Length;
Console.WriteLine(lenOflongZigZagArr(arr, n));
}
}
// This code is contributed by 29AjayKumar
Javascript
输出:
2
如果您想与行业专家一起参加直播课程,请参阅Geeks Classes Live