貪心演算法 LeetCode 376 擺動序列

2021-10-23 09:28:52 字數 1045 閱讀 1432

題面

如果連續數字之間的差嚴格地在正數和負數之間交替,則數字序列稱為擺動序列。第乙個差(如果存在的話)可能是正數或負數。少於兩個元素的序列也是擺動序列。

例如, [1,7,4,9,2,5] 是乙個擺動序列,因為差值 (6,-3,5,-7,3) 是正負交替出現的。相反, [1,4,7,2,5] 和 [1,7,4,5,5] 不是擺動序列,第乙個序列是因為它的前兩個差值都是正數,第二個序列是因為它的最後乙個差值為零。

給定乙個整數序列,返回作為擺動序列的最長子序列的長度。 通過從原始序列中刪除一些(也可以不刪除)元素來獲得子串行,剩下的元素保持其原始順序。

題目分析

其實吧…這題目也不難,但是我在做的時候沒有非常greedy,也就有了這一篇部落格…

我原本的思路是,維護乙個before來表示上一次更新答案時的末尾的數字,當存在擺動序列的時候當然是直接記錄,並且去更新be為最新的值,當不符合擺動序列的時候將be更新為最新值(貪心嘛,要波動最大的),然後再計算差值:

class

solution

else

if(dif <

0&& type >=0)

else be = nums[i];}

return ans;}}

;

寫部落格的時候突然想起來before不是每一次都更新了?其實沒有作用…可以將before省掉,因為當不符合條件的時候肯定要拋棄之前的值,在邏輯上保留但是**中沒有必要維護,而且我們僅僅關注之前是增加還是減少,而不去關心究竟變化了多少,所以type也不需要去更新…因為用不到 因此將上述**修改一下就和標答差不多了:

ac**
class

solution

else

if(dif <

0&& type >=0)

}//type 僅僅在第一次會成為0

return ans;}}

;

感想

-_-貪心最難的就是讓人想不到貪心 orz

錯誤反饋: [email protected]

leetcode 376 擺動序列 貪心演算法

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

LeetCode 376 擺動序列 貪心演算法

貪心演算法 在求解問題時,每一步都做出在當前看來是最優的選擇,從而得到乙個整體的可能最優解。題目分析 題目要求的擺動序列的本質即為 在乙個單調 遞增或者下降 區間上,只保留兩頭的節點,去掉中間節點。該上公升時就直接上公升到當前能公升的最高點 該下降時就直接下降到當前能降的最低點。示例 class s...

貪心法 LeetCode376 擺動序列

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