397. 最长上升连续子序列

给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)
样例
给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4.
给定 [5, 1, 2, 3, 4], 其最长上升连续子序列(LICS)为 [1, 2, 3, 4], 返回 4.
思路:两边遍历,利用动态规划思路,每当找到一个子序列比上一次找到的大,就存储当前的子序列,注意最后遍历结束的时候还要比较一次,因为一般写的程序是发现下降的时候来检查上升序列是否是最大的,如果序列本身在最后没有下降,不检查肯定是不合理的,一开始就错在这里了,到vs里调试了一下看了每步的结果才弄对,两次遍历:
code:

 int longestIncreasingContinuousSubsequence(vector<int> &A) {
        int num_up=0;
        int num_down=0;
        int num_max[2]={0};
        if(A.empty())
        return 0;
        if(A.size()==1)
        return 1;
       
        for(int i=1;i<A.size();i++)  //一遍遍历
        {
            if(A[i]>=A[i-1])
            num_up++;
            if(A[i]<A[i-1])
            {
                if(num_up>num_max[0])
                num_max[0]=num_up;   //如果比上一次存的大,就赋值给最大值
                num_up=0;     //这个清零
            }
        }
        if(num_up>num_max[0])       
                num_max[0]=num_up;
                
       //上面这个if很重要,因为可能结尾之前一直上升,我们前面的程序是在下降的时候才检查这次的
       //上升值是否比以前存的大,但是可能一直没有下降就不检查了么?所以跳出循环以后这里还是要检查一次
        for(int i=A.size()-2;i>=0;i--)  //一遍遍历
        {
            if(A[i]>=A[i+1])
            num_down++;
            if(A[i]<A[i+1])
            {
                if(num_down>num_max[1])
                num_max[1]=num_down;
                num_down=0;
            }
        }
         if(num_down>num_max[1])
                num_max[1]=num_down;
        return (num_max[0]>num_max[1])?num_max[0]+1:num_max[1]+1;
    
        // write your code here
    }

over

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 描述 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。 说明 最长上升子序列的定义:最长上升子序...
    6默默Welsh阅读 701评论 1 0
  • 题目 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(...
    六尺帐篷阅读 507评论 0 1
  • 问题: 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。...
    留十夜阅读 845评论 0 0
  • 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上...
    DayDayUpppppp阅读 236评论 0 0
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,248评论 19 139