動態規劃求最長降序序列
這裡可以用到兩個stl庫中的兩個函式,lower_bound() 和 upper_bound().
lower_bound(a+1,a+n+1,x)是求一個序列中第一個大於等於x的數的位置。
upper_bound(a+1,a+n+1,x)是求一個序列中第一個大於x的數的位置。
這裡的序列必須是有序序列,所謂有序系列,在STL庫中預設有序序列為升序序列,而且一旦對降序序列做upper_bound(),就會發生錯誤。
那麼如果我們想要得到一個有序序列中第一個小於或者小於等於x的數的位置,又該怎麼辦那?
我們可以把升序序列當做是降序序列,利用lower_bound(a+1,a+n+1,x,cmp)找到這個降序序列中第一個小於x的數的位置。
這裡對於這個cmp函式,我們規定bool cmp(int a,int b){return a>b;}
當然C++中有關於大於的函式,可以代替我們上文中提到的cmp函式,lower_bound(a+1,a+n+1,x,greater<int>());
O(nlogn)的時間求最長降序序列
首先,我們需要一個陣列s[],實質上充當棧的作用,從頭往後遍歷陣列
a[],遇到小於棧頂元素的數入棧,否則,利用lower_bound(d,d+n,a[i])找到棧中第一個小於a[i]的數,並將這個數踢出棧,讓a[i]代替這個數,其實就是一個賦值操作,這樣找到的序列一定是最長的降序序列,升序序列與之亦同,自證不再贅述。
相關文章
- 動態規劃:最長上升子序列動態規劃
- 最長上升子序列動態規劃動態規劃
- 動態規劃-最長公共子序列動態規劃
- 動態規劃——最長公共子序列動態規劃
- 動態規劃-最長上升子序列模型動態規劃模型
- 動態規劃(最長公共子序列LCS)動態規劃
- 動態規劃7:最長上升子序列LIS動態規劃
- 動態規劃求解最長上升子序列問題動態規劃
- 最長公共子序列問題—動態規劃sdut動態規劃
- 動態規劃經典問題----最長公共子序列動態規劃
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- 最長公共子序列&迴文字串 nyoj動態規劃字串動態規劃
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 動態規劃之最長公共子序列求解動態規劃
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 動態規劃---求硬幣最優解動態規劃
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- “最長公共字串子序列”問題的動態規劃法演算法字串動態規劃演算法
- [演算法筆記]動態規劃之最長公共子串和最長公共子序列演算法筆記動態規劃
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- 北京大學郭煒-最長上升子序列 動態規劃講解動態規劃
- [動態規劃] 六、最長迴文子串動態規劃
- 動態規劃解最長迴文子序列並優化空間複雜度動態規劃優化複雜度
- 動態規劃之子序列問題動態規劃
- LeetCode 300. 最長上升子序列(Python、動態規劃、貪心演算法)LeetCodePython動態規劃演算法
- 最長公共子序列求方案數
- 【動態規劃】求最大連續bit數動態規劃
- 【動態規劃(一)】動態規劃基礎動態規劃
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- LeetCode 1626. 無矛盾的最佳球隊---【動態規劃】最長上升子序列變換版-->最大上升子序列和LeetCode動態規劃
- 動態規劃動態規劃
- NlogN 求最長不下降子序列(LIS)
- [leetcode 中等 動態規劃]673. 最長遞增子序列的個數 [leetcode 簡單 滑動視窗] 674. 最長連續遞增序列 [筆試]陣列的遞增子陣列序列LeetCode動態規劃筆試陣列
- 動態規劃分析動態規劃
- 動態規劃(DP)動態規劃
- 動態規劃初步動態規劃
- hud1151 動態規劃 最大的公共子序列動態規劃
- PHP使用動態規劃實現最優紅包組合PHP動態規劃