牛客题霸 [ 最长递增子序列] C++题解/答案
生活随笔
收集整理的這篇文章主要介紹了
牛客题霸 [ 最长递增子序列] C++题解/答案
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
牛客題霸 [ 最長(zhǎng)遞增子序列] C++題解/答案
題目描述
給定數(shù)組arr,設(shè)長(zhǎng)度為n,輸出arr的最長(zhǎng)遞增子序列。(如果有多個(gè)答案,請(qǐng)輸出其中字典序最小的)
題意:
直接暴力會(huì)超時(shí)
應(yīng)該用二分+貪心
題解:
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;} };總結(jié)
以上是生活随笔為你收集整理的牛客题霸 [ 最长递增子序列] C++题解/答案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: dnf冒险团怎么快速升级 给大家说一说
- 下一篇: 牛客题霸 [ 排序] C++题解/答案