最长上升连续子序列 Linkcode

问题:

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

给定 [1, 1, 1, 1, 1], 其最长上升连续子序列(LICS)为 [1], 返回 1.

 1 public class Solution {
 2     /**
 3      * @param A an array of Integer
 4      * @return  an integer
 5      */
 6     public static int longestIncreasingContinuousSubsequence(int[] A) {
 7         if(A.length==0)
 8             return 0;
 9         int hz,hj,r,maxz,maxj;
10         hz=hj=0;
11         r=maxz=maxj=1;
12
13         while(r<A.length){
14             if(A[r]<A[r-1]){
15                 maxz = Math.max(maxz, r-hz);
16                 hz = r;
17             }else if(A[r]>A[r-1]){
18                 maxj = Math.max(maxj, r-hj);
19                 hj = r;
20             }else{
21                 hz = hj = r;
22             }
23             r++;
24         }
25         maxz = Math.max(maxz, r-hz);
26         maxj = Math.max(maxj, r-hj);
27         return Math.max(maxz, maxj);
28     }
29 }
时间: 2024-08-01 20:14:08

最长上升连续子序列 Linkcode的相关文章

lintcode 最长上升连续子序列 II(二维最长上升连续序列)

题目链接:http://www.lintcode.com/zh-cn/problem/longest-increasing-continuous-subsequence-ii/ 最长上升连续子序列 II 给定一个整数矩阵(其中,有 n 行, m 列),请找出矩阵中的最长上升连续子序列.(最长上升连续子序列可从任意行或任意列开始,向上/下/左/右任意方向移动). 样例 给定一个矩阵 [ [1 ,2 ,3 ,4 ,5], [16,17,24,23,6], [15,18,25,22,7], [14,1

lintcode 容易题:Longest Increasing Continuous subsequence 最长上升连续子序列

题目: 最长上升连续子序列 给定一个整数数组(下标从 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. 解题: 这个直接找就可以了,最长的升序,和最长的降序,再求最大值,时

BNUOJ 4215 最长公共连续子序列

最长公共连续子序列 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld      Java class name: Main 给你两个序列S1和S2,长度分别是L1,L2 (1 <= L1 , L2 <= 180). 写一个程序找出最长的连续公共子序列. 连续子序列定义为序列中连续的一个片段.例如序列"1 2 3"的子串有空串,"1","2",

397. 最长上升连续子序列

给定一个整数数组(下标从 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. 分别用两个量来统计升序和降序的当前连续数列长度 1 int longestI

HDU ACM 4745 Two Rabbits 最长非连续回文子序列

分析:两个不同方向开始跳跃,跳过数字相同,就相当于求回文子序列了.用dp求出从一个位置到另一个位置的最长回文子序列,相当于把[1-n]分成区间[1-x]和[x+1,n],结果就是两区间最长回文串子序列之和.枚举中间点i,求出max(dp[1,i]+dp[i+1,n])即得最终结果,回文非连续序列,从前往后,从后往前序列相同,求出区间内最长回文序列,由于是环,分成两部分,1~i,i+1~n,A可从i走到1,然后从n走到i+1,B可从1走到i,从i+1走到n . #include<iostream>

任意区间的最长连续递增子序列,最大连续子序列和

hdu3308 给n个数,有m个操作 U a b 表示将第a个数改成b Q a b 表示询问区间[a,b]的最长连续递增子序列. 区间询问问题且带修改,一般是用线段树来解决 那么要维护 Llen[rt], Lval[rt][2] 表示rt所对应的区间[l,r] 以l开头的最长连续递增子序列的长度, Lval[rt][0]表示子序列的最左边的值,Lval[rt][1]表示子序列最右边的值 Rlen[rt],Rval[rt][2]  表示rt所对应的区间[l,r]以r结尾的最长连续递增子序列的长度,

最长非连续递减子序列长度&amp;个数

1 int a[100] = {68, 69, 54, 64, 68, 64, 70, 67, 78, 62, 98, 87}; //主序列; 2 int n = 1; //主序列元素个数; 3 int large = 1; //最长非连续递减子序列序列长度; 4 int num = 1; //最长非连续递减子序列序列数量; 5 int fun(int i, int n, int cnt) // i开始下标; n结束下标; cnt已找到递减序列长度; 6 { 7 if(i == n) 8 ret

求和为0的最长连续子序列长度

  题意:给定一个数组,数组中元素的值只能是1或者-1,求其和为0的最长连续子序列的长度: 数组为1,-1,1,-1,1,-1,1,-1,其结果为:8 数组为1,1,-1,1,1,-1,-1,其结果为:6 解析: 通过分析可知,要使其和为0,只有当1和-1的个数相等时,才会成立,但题目要求是连续子序列,所以单纯统计其1和-1个数不可取. 由题目中求最长连续子序列,可想到动态规划来求解,动态规划的求解既是寻找其状态转移方程和建立状态转移表的过程 设dp[i]为下标为i及其之前数组中所有元素的和,

HDU1231 最长连续子序列

最大连续子序列 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 31687    Accepted Submission(s): 14214 Problem Description 给定K个整数的序列{ N1, N2, ..., NK },其任意连续子序列可表示为{ Ni, Ni+1, ..., Nj },其中 1 <= i <= j