📜  打印整数数组中的所有波峰和波谷(1)

📅  最后修改于: 2023-12-03 15:25:46.080000             🧑  作者: Mango

打印整数数组中的所有波峰和波谷

在一个整数数组中,如果一个数比它前后的数都大或都小,那么这个数就是一个波峰或波谷。本文将介绍如何打印出一个整数数组中的所有波峰和波谷。

方法一:暴力法

暴力法是一种最简单的方法,通过循环遍历整个数组,判断每个数是否为波峰或波谷。

def print_wave(arr):
    n = len(arr)
    for i in range(1, n - 1):
        if arr[i] > arr[i - 1] and arr[i] > arr[i + 1]:
            print("波峰:", arr[i])
        elif arr[i] < arr[i - 1] and arr[i] < arr[i + 1]:
            print("波谷:", arr[i])
方法二:二分法

通过二分查找法可以更快地判断一个数是否为波峰或波谷。

def print_wave(arr):
    n = len(arr)
    left = 0
    right = n - 1
    while left <= right:
        mid = (left + right) // 2
        if (mid == 0 or arr[mid] >= arr[mid - 1]) and (mid == n - 1 or arr[mid] >= arr[mid + 1]):
            print("波峰:", arr[mid])
            break
        elif (mid == 0 or arr[mid] <= arr[mid - 1]) and (mid == n - 1 or arr[mid] <= arr[mid + 1]):
            print("波谷:", arr[mid])
            break
        elif arr[mid] < arr[mid - 1]:
            right = mid - 1
        else:
            left = mid + 1
总结

以上是两种方法打印整数数组中所有波峰和波谷的介绍。虽然暴力法比较简单,但是其时间复杂度为O(n),而二分法的时间复杂度只有O(logn),所以当数组比较大时,二分法比较优秀。