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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

动态规划是真的难啊坚持

發布時間:2025/3/15 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 动态规划是真的难啊坚持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

動態規劃的思路,和官方題解的思路是一樣的。在這里我說說我的思考過程。
一開始我沒有直接想到dp數組里的每個元素,代表“以該元素結尾的最長有效長度”,而是我把它定義成“到該元素為止前面字符串里最長有效長度”。比如說:
( ?( ?) ?( ?( ?( ?( ?) ?)
index ? 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8
dp arr ?0 ?0 ?2 ?2 ?2 ?2 ?2 ?2 ?4
dp數組的推算如上:碰到左括號則保持不變,碰到右括號,需要看情況:
如果i-1位是左括號,則可以配對成功,但不一定會增加最長有效長度:如果dp[i-1]是0,則說明前面沒有有效括號,則可以直接+2。但dp[i-1]大于0,則說明前面肯定出現了有小括號,這時還不能+2,還要看出現過的是否跟本次產生的配對是否連續,連續了才能最長有效長度+2。比如判斷index=7時,雖然和index=6配對了,但dp[6]上是2,說明index=6之前還有一對,但它的位置我們沒有記下來,無從判斷是否跟本次產生的連續。
那么是否可以看index=5上的位置來判斷連續呢?比如:如果index=5上是右括號,就說明是連續的?反例:())))()判斷最后一位時就會出錯。所以還要再往前看一下。——僅僅是i-1位置是左括號就判斷很麻煩。
官方題解里把dp數組元素定義為“包含”該元素為末尾元素的最長有效長度,就巧妙解決了該問題:
( ?( ?) ?( ?( ?( ?( ?) ?)
index ? 0 ?1 ?2 ?3 ?4 ?5 ?6 ?7 ?8
dp arr ?0 ?0 ?2 ?0 ?0 ?0 ?0 ?2 ?4
左括號對應的dp數組元素全部置0不用管,因為有效括號不可能以左括號結尾。
碰到右括號,先看i-1位置,如果是左括號,配對成功,要+2,在左括號前一位即dp[i-2]的基礎上+2。因為dp[i-2]代表了以i-2元素為結尾的有效字串最長長度。比如判斷index=7,index=6位置是左括號,可以配對,但要看dp[5]位置的數字,目前是0,為什么是0,因為index=5的位置是左括號,不可能包含它結尾的有效字串。
而判斷index=8時,index=7位置是右括號,而dp[7]的值恰好指明了包含它的有效字串最長度,所以讓i直接減去dp[7]的值,跳轉到“以index=7為結尾的最長有效字串的更前面”,去看看有沒有和index=8配對的左括號。
如果有,則是三部分相加:本次的配對長度(2)+ 前面臨接的有效長度 + 本次配對左括號更前面的臨接的有效長度。
很可能因為本次的配對,導致兩個有效長度合并起來,行程更大的長度,比如:

class Solution { public:int longestValidParentheses(string s) {vector<int> dp(s.size(), 0);int max = 0;for (int i = 1; i < s.size(); ++i) {if (s[i] == ')') {if (s[i - 1] == '(') {dp[i] = 2 + (i >= 2 ? dp[i-2] : 0);} else if (i - 1 - dp[i-1] >= 0 && s[i - 1 - dp[i-1]] == '('){if (i - 2 - dp[i-1] >= 0) {dp[i] = 2 + dp[i-1] + dp[i - 2 - dp[i-1]];}else {dp[i] = 2 + dp[i-1];}}}if (dp[i] > max) {max = dp[i];}}return max;} };

作者:zhangkekf
鏈接:https://leetcode-cn.com/problems/longest-valid-parentheses/solution/dong-tai-gui-hua-c-by-zhangkekf/
來源:力扣(LeetCode)
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

總結

以上是生活随笔為你收集整理的动态规划是真的难啊坚持的全部內容,希望文章能夠幫你解決所遇到的問題。

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