LeetCode Q300 最長上公升子串行

2021-10-04 04:10:04 字數 925 閱讀 7489

最長上公升、最長不下降、最長下降子串行等等類似的題目求子序列長度的題基本都是使用dp來解。還要注意題目中是否指定了是連續子串行還是沒有限制,若是連續的子串行就要注意dp代表的含義。還有的題目會使用刪除某些數字來獲得子串行來反向出題,都一樣。

本題是非連續的子串行,則dp[i]表示為從[0,i]的最長上公升子串行長度。因為是非連續的子串行,所以dp[i]的大小不一定取決於dp[i-1],因為若nums[i]<=nums[i-1]則dp[i]所代表的子串行肯定不包含nums[i-1]。而dp[i]代表的序列肯定是以nums[i]結尾的序列,因此針對dp[i]的求解需要從0到i都比較一次,若num[j]dp[

i]=m

ax(d

p[i]

,dp[

j]+1

)if(

nums

[j

]

ms[i

])

j>0a

nd

j<

idp[i]=max(dp[i],dp[j]+1) if(nums[j]0andjdp

[i]=

max(

dp[i

],dp

[j]+

1)if

(num

s[j]

ms[i

])j>0a

ndj<

i還有一種思路。初始化乙個cell陣列用來存放上公升子串行。每次迴圈,判斷cell中最後乙個元素cell[j]和nums[i]的大小,若cell[j] nums[j])

}re = re > dp[i] ? re : dp[i];

}return re;

}public int lengthoflis(int nums) else r = mid;

}cell[l] = nums[i];}}

return cell.length;}}

300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10,9,2,5,3,7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是4。說明 高階 你能將演算法的時間複雜度降低到 o n log n 嗎?思路 遍歷一遍給定陣列,維護乙個陣列dp,dp i ...

300 最長上公升子串行

建立dp表,dp i 表示含第i個數字的最長上公升子串行的長度 求dp i 時,向前遍歷找出比i元素小的元素j,則動態方程為dp i max dp i dp j 1 class solution object def lengthoflis self,nums size len nums if si...

300 最長上公升子串行

給定乙個無序的整數陣列,找到其中最長上公升子串行的長度。示例 輸入 10 9,2 5,3 7,101,18 輸出 4 解釋 最長的上公升子串行是 2,3,7,101 它的長度是 4。說明 可能會有多種最長上公升子串行的組合,你只需要輸出對應的長度即可。你演算法的時間複雜度應該為 o n2 高階 你能...