📌  相关文章
📜  查找给定阵列的波幅和数量

📅  最后修改于: 2021-04-29 15:52:40             🧑  作者: Mango

给定N个整数的数组arr [] ,任务是找到给定数组的波幅和波数。如果该数组不是波数组,则打印-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


输出:
Amplitude = 13
Waves = 3

时间复杂度: O(N)
辅助空间: O(1)