牛客题霸 [ 最长递增子序列] C++题解/答案
生活随笔
收集整理的這篇文章主要介紹了
牛客题霸 [ 最长递增子序列] C++题解/答案
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
牛客題霸 [ 最長遞增子序列] C++題解/答案
題目描述
給定數組arr,設長度為n,輸出arr的最長遞增子序列。(如果有多個答案,請輸出其中字典序最小的)
題意:
直接暴力會超時
應該用二分+貪心
題解:
class Solution { public:/*** retrun the longest increasing subsequence* @param arr int整型vector the array* @return int整型vector*/vector<int> LIS(vector<int>& arr) {// write code hereint n = arr.size();if (n < 2) return arr;int ans = 0;vector<int> ret(n);vector<int> st;for (int i = 0; i < n; i++){if (st.size() == 0 || arr[i] > st.back()){st.push_back(arr[i]);ret[i] = ++ans;}else{int l = 0, h = ans-1;while (l < h){int m = (l+h)/2;if (st[m] < arr[i]) l = m+1;else h = m;}st[h] = arr[i];ret[i] = h+1;}}vector<int> res(ans);for (int i = n-1; i >= 0; i--){if (ret[i] == ans){res[--ans] = arr[i];}}return res;} };總結
以上是生活随笔為你收集整理的牛客题霸 [ 最长递增子序列] C++题解/答案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dnf冒险团怎么快速升级 给大家说一说
- 下一篇: 牛客题霸 [ 排序] C++题解/答案