【LeetCode笔记】300. 最长递增子序列(Java、动态规划、二分法、贪心)
生活随笔
收集整理的這篇文章主要介紹了
【LeetCode笔记】300. 最长递增子序列(Java、动态规划、二分法、贪心)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目描述
- 思路 & 代碼
- 動態規劃 O(n2n^2n2)
- 動態規劃 + 二分法 + 貪心 O(nlognnlognnlogn)
- 二刷
題目描述
- 難點在于時間復雜度 O(n * logn)的做法
思路 & 代碼
動態規劃 O(n2n^2n2)
- 先拋磚引玉啦~
- dp[i]:以 nums[i] 結尾的子序列,能達到的最大長度
- 對于 dp[i] 來說,只要找到前面的比 nums[i] 小的 nums[j] 中最大的 dp[j] 即可
動態規劃 + 二分法 + 貪心 O(nlognnlognnlogn)
- 新定義 tail[i]:代表長度為 i + 1 的遞增子序列的最小尾值
- 詳見注釋。建議還是看看這篇題解,結合里面的動圖會更好地理解這道題。
二刷
- 寫不出 O(logN) 的,我還寫不出你 O(n^2) 的嗎!
- 10+ 行代碼,還是挺清晰的,記得 dp[nums.length - 1] 不一定是最終答案噢~
總結
以上是生活随笔為你收集整理的【LeetCode笔记】300. 最长递增子序列(Java、动态规划、二分法、贪心)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux c 进程名 pid,Linu
- 下一篇: 【LeetCode笔记】26. 删除有序