我們把陣列 a 中符合下列屬性的任意連續子陣列 b 稱為 「山脈」:
(注意:b 可以是 a 的任意子陣列,包括整個陣列 a。)
給出乙個整數陣列a
,返回最長 「山脈」 的長度。
如果不含有 「山脈」 則返回0
。
示例 1:
示例 2:輸入:[2,1,4,7,3,2,5]輸出:5解釋:最長的 「山脈」 是 [1,4,7,3,2],長度為 5。
輸入:[2,2,2]輸出:0解釋:不含 「山脈」。
0 <= a.length <= 10000
0 <= a[i] <= 10000
遍歷陣列,使用動態規劃,遞推計算以當前位置為結尾的最長上公升子串行
class solution:
def longestmountain(self, a: list[int]) -> int:
# f[i]以i結尾的最長山脈
# g[i]以i結尾的最長遞增
f = [0] * len(a)
g = [1] * len(a)
if len(a) <=2:
return 0
if a[0] < a[1]:
g[1] = 2
for i in range(2, len(a)):
if a[i] > a[i-1]:
g[i] = g[i-1] + 1
if a[i] < a[i-1] and f[i-1] == 0 and g[i-1]>1:
f[i] = g[i-1] + 1
if a[i] < a[i-1] and f[i-1] > 0:
f[i] = f[i-1] + 1
return max(f)
遍歷陣列,記錄左右兩側均不小於自身的位置,為山腳,找山腳最大間隔
class solution:
def longestmountain(self, a: list[int]) -> int:
n = len(a)
ans = left = 0
while left + 2 < n:
right = left + 1
if a[left] < a[left + 1]:
while right + 1 < n and a[right] < a[right + 1]:
right += 1
if right < n - 1 and a[right] > a[right + 1]:
while right + 1 < n and a[right] > a[right + 1]:
right += 1
ans = max(ans, right - left + 1)
else:
right += 1
left = right
return ans
leetcode千題 845 陣列中的最長山脈
我們把陣列 a 中符合下列屬性的任意連續子陣列 b 稱為 山脈 b.length 3 存在 0 i b.length 1 使得 b 0 b 1 b i 1 b i b i 1 b b.length 1 注意 b 可以是 a 的任意子陣列,包括整個陣列 a。給出乙個整數陣列 a,返回最長 山脈 的長度...
845 陣列中的最長山脈
我們把陣列 a 中符合下列屬性的任意連續子陣列 b 稱為 山脈 注意 b 可以是 a 的任意子陣列,包括整個陣列 a。給出乙個整數陣列a,返回最長 山脈 的長度。如果不含有 山脈 則返回0。示例 1 輸入 2,1,4,7,3,2,5 輸出 5 解釋 最長的 山脈 是 1,4,7,3,2 長度為 5。...
845 陣列中的最長山脈
給出乙個整數陣列 a,返回最長 山脈 的長度。如果不含有 山脈 則返回 0。很容易想到暴力解法的思路,遍歷陣列,然後開始中心擴充套件,左邊需要嚴格遞減,右邊需要嚴格遞增,注意到兩邊都需要擴充套件。class solution int ans 0 for int i 1 i n 1 i 右邊擴充套件 ...