[Leedcode][JAVA][第300题][最长上上子序列][动态规划][压缩空间]
【問題描述】[中等]
給定一個無序的整數(shù)數(shù)組,找到其中最長上升子序列的長度。示例:輸入: [10,9,2,5,3,7,101,18] 輸出: 4 解釋: 最長的上升子序列是 [2,3,7,101],它的長度是 4。 說明:可能會有多種最長上升子序列的組合,你只需要輸出對應(yīng)的長度即可。 你算法的時間復(fù)雜度應(yīng)該為 O(n2) 。 進階: 你能將算法的時間復(fù)雜度降低到 O(n log n) 嗎?【解答思路】
1. 動態(tài)規(guī)劃
時間復(fù)雜度:O(N^2) 空間復(fù)雜度:O(N)
2. 動態(tài)規(guī)劃壓縮空間(貪心+二分)
時間復(fù)雜度:O(NlogN) 空間復(fù)雜度:O(N)
【總結(jié)】
1.子序列和子串
2.動態(tài)規(guī)劃(高度概括)
第 1 步:設(shè)計狀態(tài)
第 2 步:狀態(tài)轉(zhuǎn)移方程
第 3 步:考慮初始化
第 4 步:考慮輸出
第 5 步:考慮是否可以狀態(tài)壓縮
3.動態(tài)規(guī)劃(詳細說明)
1、思考狀態(tài)(重點)
狀態(tài)的定義,先嘗試「題目問什么,就把什么設(shè)置為狀態(tài)」;
然后思考「狀態(tài)如何轉(zhuǎn)移」,如果「狀態(tài)轉(zhuǎn)移方程」不容易得到,嘗試修改定義,目的依然是為了方便得到「狀態(tài)轉(zhuǎn)移方程」。
「狀態(tài)轉(zhuǎn)移方程」是原始問題的不同規(guī)模的子問題的聯(lián)系。即大問題的最優(yōu)解如何由小問題的最優(yōu)解得到。
2、思考狀態(tài)轉(zhuǎn)移方程(核心、難點)
狀態(tài)轉(zhuǎn)移方程是非常重要的,是動態(tài)規(guī)劃的核心,也是難點;
常見的推導(dǎo)技巧是:分類討論。即:對狀態(tài)空間進行分類;
歸納「狀態(tài)轉(zhuǎn)移方程」是一個很靈活的事情,通常是具體問題具體分析;
除了掌握經(jīng)典的動態(tài)規(guī)劃問題以外,還需要多做題;
如果是針對面試,請自行把握難度。掌握常見問題的動態(tài)規(guī)劃解法,理解動態(tài)規(guī)劃解決問題,是從一個小規(guī)模問題出發(fā),逐步得到大問題的解,并記錄中間過程;
「動態(tài)規(guī)劃」方法依然是「空間換時間」思想的體現(xiàn),常見的解決問題的過程很像在「填表」。
3、思考初始化
初始化是非常重要的,一步錯,步步錯。初始化狀態(tài)一定要設(shè)置對,才可能得到正確的結(jié)果。
角度 1:直接從狀態(tài)的語義出發(fā);
角度 2:如果狀態(tài)的語義不好思考,就考慮「狀態(tài)轉(zhuǎn)移方程」的邊界需要什么樣初始化的條件;
角度 3:從「狀態(tài)轉(zhuǎn)移方程」方程的下標(biāo)看是否需要多設(shè)置一行、一列表示「哨兵」(sentinel),這樣可以避免一些特殊情況的討論。
4、思考輸出
有些時候是最后一個狀態(tài),有些時候可能會綜合之前所有計算過的狀態(tài)。
5、思考優(yōu)化空間(也可以叫做表格復(fù)用)
「優(yōu)化空間」會使得代碼難于理解,且是的「狀態(tài)」丟失原來的語義,初學(xué)的時候可以不一步到位。先把代碼寫正確是更重要;
「優(yōu)化空間」在有一種情況下是很有必要的,那就是狀態(tài)空間非常龐大的時候(處理海量數(shù)據(jù)),此時空間不夠用,就必須「優(yōu)化空間」;
非常經(jīng)典的「優(yōu)化空間」的典型問題是「0-1 背包」問題和「完全背包」問題。
4. 動態(tài)規(guī)劃思考
- 邊界問題考慮清楚(第二第三步)
- 動態(tài)就是做表格 想清楚方向
- 自底向上 子問題 學(xué)基礎(chǔ) 再解決問題 通識教育
- 自頂向下 一般解決問題思路
轉(zhuǎn)載鏈接:https://leetcode-cn.com/problems/longest-increasing-subsequence/solution/dong-tai-gui-hua-er-fen-cha-zhao-tan-xin-suan-fa-p/
總結(jié)
以上是生活随笔為你收集整理的[Leedcode][JAVA][第300题][最长上上子序列][动态规划][压缩空间]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Node.js]get/post请求
- 下一篇: 10年老技术员教你免费的、完整的把 PD