给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)
注意事项
time
样例
给定 [5, 4, 2, 1, 3]
, 其最长上升连续子序列(LICS)为 [5, 4, 2, 1]
, 返回 4
.
给定 [5, 1, 2, 3, 4]
, 其最长上升连续子序列(LICS)为 [1, 2, 3, 4]
, 返回 4
.
public class Solution {
/**
* @param A an array of Integer
* @return an integer
*/
public int longestIncreasingContinuousSubsequence(int[] A) {
// Write your code here
if(A==null||A.length==0){
return 0;
}
int[] dp1=new int[A.length];
dp1[0]=1;
for(int i=1;i<A.length;i++){
dp1[i]=1;
if(A[i]>A[i-1]){
dp1[i]+=dp1[i-1];
}
}
int max=Integer.MIN_VALUE;
for(int i=0;i<dp1.length;i++){
max=Math.max(max, dp1[i]);
}
for(int i=0;i<A.length/2;i++){
int temp=A[i];
A[i]=A[A.length-i-1];
A[A.length-i-1]=temp;
}
int[] dp2=new int[A.length];
dp2[0]=1;
for(int i=1;i<A.length;i++){
dp2[i]=1;
if(A[i]>A[i-1]){
dp2[i]+=dp2[i-1];
}
}
for(int i=0;i<dp1.length;i++){
max=Math.max(max, dp2[i]);
}
return max;
}
}