動態規劃求最長降序序列
這裡可以用到兩個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)動態規劃
- 動態規劃-最長上升子序列模型動態規劃模型
- 動態規劃求解最長上升子序列問題動態規劃
- 最長公共子序列問題—動態規劃sdut動態規劃
- 動態規劃經典問題----最長公共子序列動態規劃
- 力扣1143. 最長公共子序列 動態規劃之最長公共子序列力扣動態規劃
- 詳解動態規劃最長公共子序列--JavaScript實現動態規劃JavaScript
- 【LeetCode動態規劃#14】子序列系列題(最長遞增子序列、最長連續遞增序列、最長重複子陣列、最長公共子序列)LeetCode動態規劃陣列
- 動態規劃---求硬幣最優解動態規劃
- 動態規劃之最長公共子序列求解動態規劃
- 雙序列動態規劃動態規劃
- 北京大學郭煒-最長上升子序列 動態規劃講解動態規劃
- 以最長公共子序列問題理解動態規劃演算法(DP)動態規劃演算法
- 淺談最長公共子序列引發的經典動態規劃問題動態規劃
- LeetCode 300. 最長上升子序列(Python、動態規劃、貪心演算法)LeetCodePython動態規劃演算法
- [動態規劃] 六、最長迴文子串動態規劃
- 動態規劃之子序列問題動態規劃
- LeetCode 1626. 無矛盾的最佳球隊---【動態規劃】最長上升子序列變換版-->最大上升子序列和LeetCode動態規劃
- python 動態規劃(揹包問題和最長公共子串)Python動態規劃
- 最長公共子序列求方案數
- [leetcode 中等 動態規劃]673. 最長遞增子序列的個數 [leetcode 簡單 滑動視窗] 674. 最長連續遞增序列 [筆試]陣列的遞增子陣列序列LeetCode動態規劃筆試陣列
- 動態規劃動態規劃
- NlogN 求最長不下降子序列(LIS)
- [leetcode] 動態規劃(Ⅰ)LeetCode動態規劃
- 動態規劃法動態規劃
- 模板 - 動態規劃動態規劃
- 動態規劃初步動態規劃
- 動態規劃分析動態規劃
- 動態規劃(DP)動態規劃
- [LeetCode解題] -- 動態規劃二 [ 子串、子序列問題 ]LeetCode動態規劃
- 演算法系列-動態規劃(1):初識動態規劃演算法動態規劃
- 動態規劃小結動態規劃
- [leetcode 1235] [動態規劃]LeetCode動態規劃
- 動態規劃專題動態規劃