劍指offer-leetcode-最大最小問題-思路篇

https://blog.csdn.net/MaYingColdPlay/article/details/105905939

1.無重複字符最長子串

雙指針法,用一個left指針,指向最左邊,一個cur指針,指向當前,記錄兩者之間的距離。

用一個列表來記錄當前無重複字符。如果有重複的子串,移動left指針。

不用兩個指針也可,直接用一個list來判斷就行了。list+從左邊pop出當前存在的。

2.最小路徑和

思路:

拿例子來說,dp[2][2]=min(dp[2][1],dp[1][2])+grid[2][2],其中等式右邊的dp也都是這麼求的。

dp[1][2]=min(dp[1][1],dp[0][2])+grid[1][2]  ...動態規劃數學方程。

首先對dp賦初始值,初始值就是i=0和j=0的時候。

 

3.最長迴文子串

思路:用一個dp來表示從i到j是否爲迴文子串,首先初始化,dp[i][i]是True。

然後從index爲1開始進行遍歷,如果s[i]==s[j],分兩種情況,如果是兩個挨着的,是True,

如果不是挨着的,等於他上一個狀態。

判斷是否爲最大值,如果是最大值,記錄當前的下標i和max_len,從s中進行索引。

4.最長上升子序列

思路:動態規劃,dp[i]表示到位置i時的最長上升子序列,從0遍歷到i,如果nums[i]大於nums[j],

dp[i]=dp[j]+1,注意要選擇dp[i]與dp[j]+1的最大值。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章