845. 数组中的最长山脉
思路:①先找数组中的“山峰”和“山谷”
②定义山峰到两边山谷的距离为山脉的距离
③遍历取最大的山脉
class Solution:
def longestMountain(self, A: List[int]) -> int:
len_ = len(A) - 1
if len_ < 2 :
return 0
peak,valley = list(),list()
if A[0] >= A[1]:
valley.append(1)
for i in range(1,len_):
if A[i]>A[i-1] and A[i]>A[i+1]:
peak.append(i)
elif A[i] == A[i-1] or A[i] == A[i+1]:
valley.append(i)
elif A[i] < A[i-1] and A[i]<A[i+1]:
valley.append(i)
if A[len_] >= A[len_-1]:
valley.append(len_-1)
if peak:
max_ = 0
for _ in peak:
begin,end = 0,len_
for j in valley:
if j<_:
begin = j
else:
end = j
break
max_ = max(max_,end-begin+1)
return max_
return 0
时间复杂度是根据数组情况分化的
最优时间复杂度O(n),最差时间复杂度O(n²)