[編程題]最長遞增子序列B

給定一個長度為N的數(shù)組独郎,找出一個最長的單調自增子序列(不一定連續(xù),但是順序不能亂)例如:給定一個長度為8的數(shù)組A{1,3,5,2,4,6,7,8}阔蛉,則其最長的單調遞增子序列為{1,2,4,6,7,8}矮嫉,長度為6.
輸入描述:
第一行包含一個整數(shù)T,代表測試數(shù)據(jù)組數(shù)口芍。對于每組測試數(shù)據(jù):N-數(shù)組的長度a1 a2 ... an (需要計算的數(shù)組)保證:1<=N<=3000,0<=ai<=MAX_INT.

輸出描述:
對于每組數(shù)據(jù),輸出一個整數(shù)序列雇卷,代表最長遞增子序列鬓椭。若有多組最長上升子序列,輸出第一組关划。保證:1<=T<=20,1<=N<=3000,0<=ai<=MAX_INT.

輸入例子:
2
7
89 256 78 1 46 78 8
5
6 4 8 2 17
輸出例子:
1 46 78
6 8 17

#include <iostream>
#include <vector>
#include <set>
  
using namespace std;
  
int main(){
    int T;
    cin  >> T;
    while(T--){
        int n;
        cin >> n;
        vector<int> nums(n, 0);
        for(int i=0;i<n;i++){
            cin >> nums[i];
        }
        vector<int> keep;
        vector<set<int>> pos;
        for(int i=0;i<n;i++){
            auto it = lower_bound(keep.begin(), keep.end(), nums[i]);
            if(it!=keep.end()){
                (pos.begin() + (it-keep.begin()))->insert(i);  
                //替換例如 1小染,3 后面是個2 --->替換為1, 2
                *it = nums[i];
            }
            else{
                pos.push_back({i});
                keep.push_back(nums[i]);
            }
        }
        vector <int> ans;
        for(auto iter = pos.rbegin(); iter!=pos.rend(); iter++){
            const set<int> &tmp = *iter;
            if(ans.empty()){
                ans.push_back(*tmp.begin());
            }
            else{
                for(const auto &t : tmp){
                    if (nums[t]<nums[ans.back()]){
                        ans.push_back(t);
                        break;
                    }
                }
            }
        }
        //倒著輸出
        for(auto iter = ans.rbegin(); iter!=ans.rend(); iter++){
            cout << nums[*iter];
            if(iter+1 != ans.rend())    cout << " ";
        }
        if(T)   cout << endl;
    }
    return 0;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末贮折,一起剝皮案震驚了整個濱河市裤翩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌调榄,老刑警劉巖踊赠,帶你破解...
    沈念sama閱讀 217,657評論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異振峻,居然都是意外死亡臼疫,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,889評論 3 394
  • 文/潘曉璐 我一進店門扣孟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烫堤,“玉大人,你說我怎么就攤上這事凤价「胝澹” “怎么了?”我有些...
    開封第一講書人閱讀 164,057評論 0 354
  • 文/不壞的土叔 我叫張陵利诺,是天一觀的道長富蓄。 經(jīng)常有香客問我,道長慢逾,這世上最難降的妖魔是什么立倍? 我笑而不...
    開封第一講書人閱讀 58,509評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮侣滩,結果婚禮上口注,老公的妹妹穿的比我還像新娘。我一直安慰自己君珠,他們只是感情好寝志,可當我...
    茶點故事閱讀 67,562評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般材部。 火紅的嫁衣襯著肌膚如雪毫缆。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,443評論 1 302
  • 那天乐导,我揣著相機與錄音苦丁,去河邊找鬼。 笑死兽叮,一個胖子當著我的面吹牛芬骄,可吹牛的內容都是我干的猾愿。 我是一名探鬼主播鹦聪,決...
    沈念sama閱讀 40,251評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蒂秘!你這毒婦竟也來了泽本?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,129評論 0 276
  • 序言:老撾萬榮一對情侶失蹤姻僧,失蹤者是張志新(化名)和其女友劉穎规丽,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體撇贺,經(jīng)...
    沈念sama閱讀 45,561評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡赌莺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,779評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了松嘶。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片艘狭。...
    茶點故事閱讀 39,902評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖翠订,靈堂內的尸體忽然破棺而出巢音,到底是詐尸還是另有隱情,我是刑警寧澤尽超,帶...
    沈念sama閱讀 35,621評論 5 345
  • 正文 年R本政府宣布官撼,位于F島的核電站,受9級特大地震影響似谁,放射性物質發(fā)生泄漏傲绣。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,220評論 3 328
  • 文/蒙蒙 一巩踏、第九天 我趴在偏房一處隱蔽的房頂上張望秃诵。 院中可真熱鬧,春花似錦蛀缝、人聲如沸顷链。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,838評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗤练。三九已至榛了,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間煞抬,已是汗流浹背霜大。 一陣腳步聲響...
    開封第一講書人閱讀 32,971評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留革答,地道東北人战坤。 一個月前我還...
    沈念sama閱讀 48,025評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像残拐,于是被迫代替她去往敵國和親途茫。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,843評論 2 354

推薦閱讀更多精彩內容

  • 給定一個長度為N的數(shù)組溪食,找出一個最長的單調自增子序列(不一定連續(xù)囊卜,但是順序不能亂)例如:給定一個長度為8的數(shù)組A{...
    AlwaysFrank閱讀 662評論 0 0
  • 說明: 本文中出現(xiàn)的所有算法題皆來自牛客網(wǎng)-劍指Offer在線編程題错沃,在此只是作為轉載和記錄栅组,用于本人學習使用,不...
    秋意思寒閱讀 1,152評論 1 1
  • 1枢析、用C語言實現(xiàn)一個revert函數(shù)玉掸,它的功能是將輸入的字符串在原串上倒序后返回。 2醒叁、用C語言實現(xiàn)函數(shù)void ...
    希崽家的小哲閱讀 6,270評論 0 12
  • 標簽(空格分隔): 算法 C++ 筆試 第三題:描述小王最近在開發(fā)一種新的游戲引擎司浪,但是最近遇到了性能瓶頸。于是他...
    認真學計算機閱讀 1,913評論 0 8
  • 問題定義: 給定一個長度為N的數(shù)組辐益,找出一個最長的單調自增子序列(不一定連續(xù)断傲,但是順序不能亂)。例如:給定一個長度...
    miltonsun閱讀 1,072評論 0 1