lintcode——最长上升连续子序列

xiaoxiao2021-02-28  3

给定一个整数数组(下标从 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.

思路:

遍历一遍数组,找出最大的升序降序长度即可。

代码:

public int longestIncreasingContinuousSubsequence(int[] A) {         // Write your code here         int len = A.length;         int a=0,b=0;//最大的递增、递减长度         int p=1,q=1; // 递增(减)序列的长度临时变量         if(len==1)             return 1;// 数组长度为1,直接返回1;         for(int i=0 ; i<len-1 ; i++){             if(A[i]-A[i+1]<0){  //如果是递增                 q=1;//把递减序列临时变量长度置为1,递减序列重新开始计数                 p++;//递增序列长度加1                 if(p>a)                     a=p;             }             else{                 p=1;                 q++;                 if(q>b)                     b=q;             }         }         return Math.abs(a)>Math.abs(b)?a:b;//返回两个长度绝对值的大的一方     }

转载请注明原文地址: https://www.6miu.com/read-1150322.html

最新回复(0)