📅  最后修改于: 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),所以当数组比较大时,二分法比较优秀。