最长连续递增子序列(部分有序)

题目:(1,9,2,5,7,3,4,6,8,0,)中最长的递增子序列为(3,4,6,8)。

代码:

public class 最长递增子序列 {

	public static void main(String[] args) {
		int []arr = {1,0,2,5,7,3,4,6,8,9,1,2};
		getLargestLen(arr);

	}

	private static void getLargestLen(int[] arr) {
		int begin=0;     // 最长递增子序列长度的开始位
		int maxLen = 1; // 最长递增子序列长度
		int k = 1;  // 递增子序列长度
		for (int end = 1; end < arr.length; end++) {
			if(arr[end]>=arr[end-1]){
				k++;
			}else {
				if (k>=maxLen) {
					maxLen = k;
					k=1;
					begin = end-maxLen;
				}
			}
		}
		System.out.print("最长连续递增子序列为:");
		for(int i = begin;i<begin+maxLen;i++)
			System.out.print(arr[i] + "   ");
	}

}

结果:

  

原文地址:https://www.cnblogs.com/xiaoyh/p/10262061.html

时间: 2024-08-03 23:50:11

最长连续递增子序列(部分有序)的相关文章

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

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结尾的最长连续递增子序列的长度,

【算法】——查找:最长连续递增子序列(部分有序)

找出在数组中的最长递增子序列 数组:1,9,2,5,7,3,4,6,8,0 最长递增子序列:3,4,6,8 思路: 遇到大的就移动,如果在某一个位置变小了就计算这一段的长度(双指针)不停更新最大的length一个在前线,一个在后面作为游标,最后结束了看一下战线拉了有多长 public class 最长递增子序列 { public static void main(String[] args) { int []arr = {0,1,0,1,2,3,1,2,0,1,2,3,4,5,1}; getLa

[LintCode] Longest Increasing Continuous Subsequence 最长连续递增子序列

Give an integer array,find the longest increasing continuous subsequence in this array. An increasing continuous subsequence: Can be from right to left or from left to right. Indices of the integers in the subsequence should be continuous. Notice O(n

LeetCode 674. 最长连续递增序列(Longest Continuous Increasing Subsequence) 18

674. 最长连续递增序列 674. Longest Continuous Increasing Subsequence 题目描述 给定一个未经排序的整型数组,找到最长且连续的递增序列. Given an unsorted array of integers, find the length of longest continuous increasing subsequence (subarray). 每日一算法2019/5/21Day 18LeetCode674. Longest Conti

LeetCode - 最长连续递增序列

题目描述: 给定一个未经排序的整数数组,找到最长且连续的的递增序列. 示例 1: 输入: [1,3,5,4,7] 输出: 3 解释: 最长连续递增序列是 [1,3,5], 长度为3.尽管 [1,3,5,7] 也是升序的子序列, 但它不是连续的,因为5和7在原数组里被4隔开. 示例 2: 输入: [2,2,2,2,2] 输出: 1 解释: 最长连续递增序列是 [2], 长度为1. code: public class Solution { public int findLengthOfLCIS(i

最长单调递增子序列 POJ 3903 Stock Exchange .

题目传送门 : -------->点这里点这里<---------- 题目大意: 给出一串正整数,个数为N个.1<=N<=100000.求最长单调递增子序列长度. 样例输入: 6 5 2 1 4 5 3 3 1 1 1 4 4 3 2 1 样例输出: 3 1 1 =================================================================== 最长单调递增子序列问题的DP朴素算法复杂度为 O(n^2); 然而题目中的 N 最大有

HDURevenge of Segment Tree(第二长的递增子序列)

题目链接 题目大意:这题是求第二长的递增子序列. 解题思路:用n^2的算法来求LIS,但是这里还要记录一下最长的那个序列是否有多种组成方式,如果>= 2, 那么第二长的还是最长的LIS的长度,否则就是LIS - 1: 代码: #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1005; int l[maxn], c[maxn

最长单调递增子序列的三种解法

问题描述: 找出由n个数组成的序列的最长单调递增子序列 解法一:转化成LCS问题求解,时间复杂度为O(n*n). 思路:原序列为A,把A按升序排序得到序列B,求出A,B序列的最长公共子序列,即为A的最长单调递增子序列. #include<iostream> #include<algorithm> #include<string> #include<cstdio> using namespace std; //转化成LCS问题,时间复杂度O(n*n) int

hdoj 5087 Revenge of LIS II 【第二长单调递增子序列】

题目:hdoj 5087 Revenge of LIS II 题意:很简单,给你一个序列,让你求第二长单调递增子序列. 分析:其实很简单,不知道比赛的时候为什么那么多了判掉了. 我们用O(n^2)的时间求单调递增子序列的时候,里面在加一层循环维护sum数组,表示前面有几个可以转移当当前,求前面sum的和保存到当前. 最后求最后一个sum[n-1]是否为1就ok,为1的话在最长的基础上减一,否则就是最长的. AC代码: #include <iostream> #include <algor