序列的最长单调递增子序列

#include <iostream>
#include <vector>
using namespace std;

vector<int> lengthOfLIS(vector<int>& nums) {
    int n = nums.size();
    vector<int> len(n, 1);
    vector<int> res;
    int value_max = len[0];
    int flag = -1;
    for (int i = 1; i < n; i++)
    {
        int lenmax = INT_MIN;
        for (int j = 0; j < i; j++)
            if (nums[j] < nums[i])
            {
                if (len[j] > lenmax)
                    lenmax = len[j];
                len[i] = lenmax + 1;
            }
        if (len[i] > value_max)
        {
            value_max = len[i];
            flag = i;
        }
    }
    res.push_back(nums[flag]);
    for(int i = flag - 1; i > 0; i--)
        if (nums[i] < nums[flag] && len[i] == len[flag] - 1)
        {
            res.push_back(nums[i]);
            flag = i;
        }

    return res;
}
int main()
{
    vector<int> nums = { 10, 9, 2, 5, 3, 7, 101, 18 };
    vector<int> res = lengthOfLIS(nums);
    for (vector<int>::iterator it = res.end(); it != res.begin();)
        cout << *(--it) << " ";
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容