日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

leetcode 376. Wiggle Subsequence | 376. 摆动序列(动态规划)

發布時間:2024/2/28 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 leetcode 376. Wiggle Subsequence | 376. 摆动序列(动态规划) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目

https://leetcode.com/problems/wiggle-subsequence/

題解

刷題大概確實是有效果的吧…
印象中,這算是今日第二道,全局第三道沒看答案寫出來的 dp …
找到 dp 的套路,總會有讓 dp 不再成為玄學的那一天,指日可待…

DP 思路

也不全是自己想的思路。這道題與 leetcode 300. Longest Increasing Subsequence | 300. 最長遞增子序列(動態規劃)非常類似,思路很大程度上受到了這道題的啟發,也就是在計算連續子序列的問題時,dp 用來記錄強制包含當前元素時的最長子序列長度。

第 300 題 “最長遞增子序列” 不同的是,本題要求子序列 增減性不斷交替,所以還需要考慮 前一個序列的末尾元素的增減性。為此,我們創建一個 incr[] 數組,incr[j] 用來記錄當前 j 位置最長子序列的末尾元素的增減性,以便和后面 j 位置上的元素相呼應。

順便貼上幾乎看不懂的草稿,記錄一下“嘗試”的過程(對于 dp 問題,可以先用前幾個數嘗試一下,找感覺)

class Solution {public int wiggleMaxLength(int[] nums) {if (nums.length == 1) return 1;if (nums.length == 2) return nums[0] == nums[1] ? 1 : 2;boolean[] incr = new boolean[nums.length];int[] dp = new int[nums.length];dp[0] = 1;for (int i = 1; i < dp.length; i++) {dp[i] = 1;for (int j = 0; j < i; j++) {if (nums[j] == nums[i]) continue;if (j == 0 || incr[j] == nums[j] > nums[i]) {if (dp[i] < dp[j] + 1) {dp[i] = dp[j] + 1;incr[i] = nums[j] < nums[i];}}}}return dp[dp.length - 1];} }

總結

以上是生活随笔為你收集整理的leetcode 376. Wiggle Subsequence | 376. 摆动序列(动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。