leetcode376 擺動序列

2022-07-11 02:06:16 字數 1106 閱讀 6439

**與:

思路:每當我們選擇乙個元素作為擺動序列的一部分時,這個元素要麼是上公升的,要麼是下降的,這取決於前乙個元素的大小。那麼列出狀態表示式為:

up[i] 表示以前 i個元素中的某乙個為結尾的最長的「上公升擺動序列」的長度。

down[i] 表示以前 i 個元素中的某乙個為結尾的最長的「下降擺動序列」的長度。

下面以 up[i] 為例,說明其狀態轉移規則:

當``nums[i]-nums[i-1]時,我們無法選出更長的「上公升擺動序列」的方案。因為對於任何以nums[i]`結尾的「上公升擺動序列」,我們都可以將 nums[i] 替換為nums[i−1],使其成為以nums[i−1] 結尾的「上公升擺動序列」。

當nums[i]>nums[i−1] 時,我們既可以從up[i−1] 進行轉移,也可以從down[i−1] 進行轉移。下面我們證明從 down[i−1] 轉移是必然合法的,即必然存在乙個down[i−1] 對應的最長的「下降擺動序列」的末尾元素小於nums[i]。

們記這個末尾元素在原序列中的下標為 jj,假設從 jj 往前的第乙個「谷」為nums[k],我們總可以讓 jj 移動到 kk,使得這個最長的「下降擺動序列」的末尾元素為「谷」。

然後我們可以證明在這個末尾元素為「谷」的情況下,這個末尾元素必然是從nums[i] 往前的第乙個「谷」。證明非常簡單,我們使用反證法,如果這個末尾元素不是從nums[i] 往前的第乙個「谷」,那麼我們總可以在末尾元素和nums[i] 之間取得一對「峰」與「谷」,接在這個「下降擺動序列」後,使其更長。

這樣我們知道必然存在乙個down[i−1] 對應的最長的「下降擺動序列」的末尾元素為nums[i] 往前的第乙個「谷」。這個「谷」必然小於nums[i]。證畢。

leetcode376擺動序列

def wigglemaxlength two nums up j 表示當前元素較上乙個元素是公升序狀態,所以要找到與公升序狀態之前最近的逆序的狀態的長度down j 1 到i時當前序列的最長的擺動陣列的長度 down j 表示當前元素較上乙個元素是逆序的長度,到i時當前序列的最長的擺動陣列的長度 ...

Leetcode 376 擺動序列

如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第乙個差 如果存在的話 可能是正數或負數。少於兩個元素的序列也是擺動序列。例如,1,7,4,9,2,5 是乙個擺動序列,因為差值 6,3,5,7,3 是正負交替出現的。相反,1,4,7,2,5 和 1,7,4,5,5 不是擺動序...

leetcode376擺動序列

如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第乙個差 如果存在的話 可能是正數或負數。少於兩個元素的序列也是擺動序列。例如,1,7,4,9,2,5 是乙個擺動序列,因為差值 6,3,5,7,3 是正負交替出現的。相反,1,4,7,2,5 和 1,7,4,5,5 不是擺動序...