Leetcode刷题笔记题解(C++):寻找最长递增子序列的长度

这应该算是一个模板

就是 在一段顺序固定的数组中,找出递增的最长一段数字(可以不连续),或者求出长度的意思

在算法题中非常常见

在这里总结一下吧

举例再说明一下:

1 3 4 6 2 7 8 9 11

最长递增子序列为1 3 4 6 7 8 9 11 长度为8

思路的话:

从第二个开始遍历,如果当前的大于上一个则length++

如果小于上一个,则对之前的元素二分查找找到刚大于当前元素的值进行替换,length不变

Leetcode刷题笔记题解(C++):寻找最长递增子序列的长度_第1张图片

代码如下:

#include 
#include
#include
using namespace std;
int  max_length(vector&nums);
int main() {
    vectornums;
    int n;
    while(cin>>n){
        nums.push_back(n);
    }
    cout<&nums){
    int length=nums.size();
    //如果数组的长度小于等于1,则输出长度即可
    if(length<=1) return length;
    //temp用来保存递增的数组元素
    vectortemp(length);
    //初始化end=0,表示还没找
    int end=0;
    temp[0]=nums[0];
    for(int i=1;itemp[end]){
            end++;
            temp[end]=nums[i];
        }else{
            //如果当前元素小于上一元素,则对之前的元素进行二分查找将当前远胜于与刚大于当前元素的元素进行替换
            int left=0,right=end;
            while(left

 

你可能感兴趣的:(Leetcode算法题解,算法,c++,数据结构,leetcode,最长递增子序列)