给定一个由N 个整数组成的数组arr[] ,任务是找到给定数组的波幅和波数。如果数组不是波形数组,则打印-1 。
Wave Array: An array is a wave array if it is continuously strictly increasing and decreasing or vice-versa.
Amplitude is defined as the maximum difference of consecutive numbers.
例子:
Input: arr[] = {1, 2, 1, 5, 0, 7, -6}
Output: Amplitude = 13, Waves = 3
Explanation:
For the array observe the pattern 1->2 (increase), 2->1 (decrease), 1->5 (increase), 5->0 (decrease), 0->7 (increase), 7->-6 (decrease). Amplitude = 13 (between 7 and -6) and total waves = 3
Input: arr[] = {1, 2, 1, 5, 0, 7, 7}
Output: -1
Explanation:
The array is not waved array as the last two elements of the array are equal, hence the answer is -1.
方法:
这个想法是检查两侧相邻元素,其中两者都必须小于或大于当前元素。如果满足此条件,则计算波数,否则打印-1 ,其中波数为(n – 1) / 2 。在遍历数组的同时不断更新连续元素之间的最大差值以获得给定波阵列的幅度。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
using namespace std;
// Function to find the amplitude and
// number of waves for the given array
bool check(int a[], int n)
{
int ma = a[1] - a[0];
// Check for both sides adjacent
// elements that both must be less
// or both must be greater
// than current element
for (int i = 1; i < n - 1; i++) {
if ((a[i] > a[i - 1]
&& a[i + 1] < a[i])
|| (a[i] < a[i - 1]
&& a[i + 1] > a[i]))
// Update amplitude with max value
ma = max(ma, abs(a[i] - a[i + 1]));
else
return false;
}
// Print the Amplitude
cout << "Amplitude = " << ma;
cout << endl;
return true;
}
// Driver Code
int main()
{
// Given array a[]
int a[] = { 1, 2, 1, 5, 0, 7, -6 };
int n = sizeof a / sizeof a[0];
// Calculate number of waves
int wave = (n - 1) / 2;
// Function Call
if (check(a, n))
cout << "Waves = " << wave;
else
cout << "-1";
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to find the amplitude and
// number of waves for the given array
static boolean check(int a[], int n)
{
int ma = a[1] - a[0];
// Check for both sides adjacent
// elements that both must be less
// or both must be greater
// than current element
for (int i = 1; i < n - 1; i++)
{
if ((a[i] > a[i - 1] &&
a[i + 1] < a[i]) ||
(a[i] < a[i - 1] &&
a[i + 1] > a[i]))
// Update amplitude with max value
ma = Math.max(ma, Math.abs(a[i] - a[i + 1]));
else
return false;
}
// Print the Amplitude
System.out.print("Amplitude = " + ma);
System.out.println();
return true;
}
// Driver Code
public static void main(String[] args)
{
// Given array a[]
int a[] = { 1, 2, 1, 5, 0, 7, -6 };
int n = a.length;
// Calculate number of waves
int wave = (n - 1) / 2;
// Function Call
if (check(a, n))
System.out.print("Waves = " + wave);
else
System.out.print("-1");
}
}
// This code is contributed by sapnasingh4991
Python3
# Python3 program for the above approach
# Function to find the amplitude and
# number of waves for the given array
def check(a, n):
ma = a[1] - a[0]
# Check for both sides adjacent
# elements that both must be less
# or both must be greater
# than current element
for i in range(1, n - 1):
if ((a[i] > a[i - 1] and
a[i + 1] < a[i]) or
(a[i] < a[i - 1] and
a[i + 1] > a[i])):
# Update amplitude with max value
ma = max(ma, abs(a[i] - a[i + 1]))
else:
return False
# Prthe Amplitude
print("Amplitude = ", ma)
return True
# Driver Code
if __name__ == '__main__':
# Given array a[]
a = [1, 2, 1, 5, 0, 7, -6]
n = len(a)
# Calculate number of waves
wave = (n - 1) // 2
# Function Call
if (check(a, n)):
print("Waves = ",wave)
else:
print("-1")
# This code is contributed by Mohit Kumar
C#
// C# program for the above approach
using System;
class GFG{
// Function to find the amplitude and
// number of waves for the given array
static bool check(int []a, int n)
{
int ma = a[1] - a[0];
// Check for both sides adjacent
// elements that both must be less
// or both must be greater
// than current element
for (int i = 1; i < n - 1; i++)
{
if ((a[i] > a[i - 1] &&
a[i + 1] < a[i]) ||
(a[i] < a[i - 1] &&
a[i + 1] > a[i]))
// Update amplitude with max value
ma = Math.Max(ma, Math.Abs(a[i] - a[i + 1]));
else
return false;
}
// Print the Amplitude
Console.Write("Amplitude = " + ma);
Console.WriteLine();
return true;
}
// Driver Code
public static void Main(String[] args)
{
// Given array []a
int []a = { 1, 2, 1, 5, 0, 7, -6 };
int n = a.Length;
// Calculate number of waves
int wave = (n - 1) / 2;
// Function Call
if (check(a, n))
Console.Write("Waves = " + wave);
else
Console.Write("-1");
}
}
// This code is contributed by sapnasingh4991
Javascript
Amplitude = 13
Waves = 3
时间复杂度: O(N)
辅助空间: O(1)
如果您希望与专家一起参加现场课程,请参阅DSA 现场工作专业课程和学生竞争性编程现场课程。