赶在新年前,再发一篇

#include <vector>
#include <algorithm>
#include <stdio.h>


//将一个序列分成n个递增子序列,求n的最小值
int MinIncrSeqCount(const std::vector<int>& v) {
    std::vector<int> v1;
    for (auto& value : v) {
        auto it = std::upper_bound(v1.begin(), v1.end(), value, [](int a, int b){return a > b;});
        if (it == v1.end()) 
            v1.push_back(value);
        else
            *it = value;
    }
    return (int)v1.size();
}

int main(int argc, char** argv) {
    printf("%d\n", MinIncrSeqCount({1}));
    printf("%d\n", MinIncrSeqCount({1,3}));
    printf("%d\n", MinIncrSeqCount({3,3}));
    printf("%d\n", MinIncrSeqCount({1,3,3,3}));
    printf("%d\n", MinIncrSeqCount({1,3,2}));
    printf("%d\n", MinIncrSeqCount({1,3,2,6,4}));
    printf("%d\n", MinIncrSeqCount({1,3,2,6,4,3}));
    printf("%d\n", MinIncrSeqCount({1,3,2,6,4,5}));
    return 0;
}

  

猜你喜欢

转载自www.cnblogs.com/bluehero888/p/12126534.html