java最长上升连续子序列(LICS)
来源:互联网 发布:云计算概念股 编辑:程序博客网 时间:2024/06/15 05:39
题目
给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。
(最长上升连续子序列可以定义为从右到左或从左到右的序列。)
样例
给定 [5, 4, 2, 1, 3], 其最长上升连续子序列为 [5, 4, 2, 1], 返回 4.
给定 [5, 1, 2, 3, 4], 其最长上升连续子序列(LICS)为 [1, 2, 3, 4], 返回 4.
分析:
首先从左到右的上升序列来说,使用队列来装从小到大的连续子序列,一旦不满足从小到大,就记录队列的长度为max,然后清空
队列,重新开始装从小到大的连续子序列,一旦不满足,就获取队列的长度和max进行比较,获取最大的赋值给max,知道遍历完所有元素。
从右到左可以看做最长下降子序列,原理类似。
import java.util.LinkedList;import java.util.Queue;import java.util.Scanner;public class n12LICS { public static int[] a; public static void main(String[] args) { Scanner input=new Scanner(System.in); int N=input.nextInt(); if(N<=0){ return; } a=new int[N]; for(int i=0;i<N;i++){ a[i]=input.nextInt(); } int[] c=getLics(a); System.out.printf("up:%d down:%d",c[0],c[1]); } public static int[] getLics(int[] a){ if(a.length<=0){ return new int[]{0,0}; } int max1=0;//上升 int max2=0;//下降 Queue<Integer> q1=new LinkedList<Integer>(); q1.offer(a[0]); Queue<Integer> q2=new LinkedList<Integer>(); q2.offer(a[0]); for(int i=1;i<a.length;i++){ if(a[i]<a[i-1]){ if(q1.size()>max1){ max1=q1.size(); q1.clear(); } } q1.offer(a[i]); if(a[i]>a[i-1]){ if(q2.size()>max2){ max2=q2.size(); q2.clear(); } } q2.offer(a[i]); } if(q1.size()>max1){ max1=q1.size(); q1.clear(); } if(q2.size()<max2){ max2=q2.size(); q2.clear(); } return new int []{max1,max2}; }}
阅读全文
0 0
- java最长上升连续子序列(LICS)
- 病毒(LICS 最长上升公共子序列)
- Java实现-最长上升连续子序列
- 最长上升连续子序列(LintCode)
- 最长上升子序列(非连续)
- 最长上升连续子序列
- 最长上升连续子序列
- 最长连续上升子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- 最长上升连续子序列
- “最长上升子序列,最大连续子序列和,最长公共子串”的Java实现
- HDU 3308 最长上升连续子序列 (线段树)
- HDU 3308 LCIS(最长连续上升子序列)
- htmlunit获取指定元素
- Android Handler学习
- PAT A1077. Kuchiguse (20)
- Java多态性理解
- 系统线程
- java最长上升连续子序列(LICS)
- (一)单例模式详解
- c语言指针
- Jeddict:怎样在window系统下,成功打包Angular
- Nginx学习笔记(三)
- Android—检测手机多点触摸点数
- 通知类短信接口的实现
- 第三方登录友盟
- 七月算法深度学习 第三期 学习笔记-第三节 卷积神经网络与典型结构