2020 10 25 陣列中的最長山脈

2021-10-25 05:19:09 字數 1685 閱讀 4002

我們把陣列 a 中符合下列屬性的任意連續子陣列 b 稱為 「山脈」:

(注意:b 可以是 a 的任意子陣列,包括整個陣列 a。)

給出乙個整數陣列a,返回最長 「山脈」 的長度。

如果不含有 「山脈」 則返回0

示例 1:

輸入:[2,1,4,7,3,2,5]輸出:5解釋:最長的 「山脈」 是 [1,4,7,3,2],長度為 5。
示例 2:

輸入:[2,2,2]輸出:0解釋:不含 「山脈」。
0 <= a.length <= 100000 <= 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 右邊擴充套件 ...