陣列中的最長山脈 845

2022-06-07 05:54:10 字數 1128 閱讀 4544

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

給出乙個整數陣列 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 <= 10000

0 <= a[i] <= 10000

思路:

由於只能掃瞄一次,所以要判斷出哪些點不能作為山頭,而且要能區別不同的山頭(包括上坡段和下坡段),我們從頭掃瞄陣列,記錄兩個變數up和down,記錄到當前下標i時,上坡和下坡有多長。

up和down在以下兩個條件成立時會被歸為0。

a[i] == a[i + 1] or ( down > 0 && a[i] < a[i +1] )

條件的意思是如果前後兩個值相等a[i] == a[i+1],那麼不管是上坡還是下坡截止到當前第i個元素得到的up和down都是無效的,所以必須歸為0。如果當前正在下坡路段down>0

但是突然有個元素不滿足下坡時後乙個元素小於前乙個元素的特性(a[i] < a[i+1] ),那麼就證明第i個元素已經是坡底元素的下乙個元素了,不屬於這個山頭,所以up和down要歸零。

注意:在計算出所有的up以及down之後,我們就可以列舉山頂。需要注意的是,只有當 up 和 down均大於0 時,a[i] 才能作為山頂,並且山脈的長度為 up+down+1。

**:

class solution 

int up = 0, down =0;

int res = 0;

for(int i = 0;i < len-1; i++)

if(a[i] < a[i+1])

if(a[i] > a[i+1])

if(up > 0 && down > 0)

}return res;

}}

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 右邊擴充套件 ...

845 陣列中的最長山脈

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。給出乙個整數陣列 ...