lintcode :最长上升连续子序列
题目:
给定一个整数数组(下标从 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
.
解题:
这个直接找就可以了,最长的升序,和最长的降序,再求最大值,时间复杂度O(N)
Java程序:
public class Solution {
/**
* @param A an array of Integer
* @return an integer
*/
public int longestIncreasingContinuousSubsequence(int[] A) {
// Write your code here
int left = Integer.MIN_VALUE;
int right = Integer.MIN_VALUE;
int m = A.length;
int tmp1 = 1;
int tmp2 = 1;
if (m==0)
return 0;
for(int i = 0; i<m-1 ;i++){
if (A[i] <= A[i+1]){
tmp1++;
}else{
left = left>tmp1?left:tmp1;
tmp1 = 1;
}
if (A[i] >= A[i+1]){
tmp2 ++;
}else{
right = right>tmp2?right:tmp2;
tmp2 = 1;
}
}
left = left>tmp1?left:tmp1;
right = right>tmp2?right:tmp2;
return left>right?left:right;
}
}
总耗时: 6578 ms
Python程序:
class Solution:
# @param {int[]} A an array of Integer
# @return {int} an integer
def longestIncreasingContinuousSubsequence(self, A):
# Write your code here
m = len(A)
if m ==0:
return 0
left = 0
right = 0
tmp1 = 1
tmp2 = 1
for i in range(m-1):
if A[i]<= A[i+1]:
tmp1+=1
else:
left = max(left,tmp1)
tmp1 = 1
if A[i]>= A[i+1]:
tmp2+=1
else:
right = max(right,tmp2)
tmp2 = 1
left = max(tmp1,left)
right = max(tmp2,right)
return max(left, right)
总耗时: 546 ms
lintcode :最长上升连续子序列的更多相关文章
- lintcode 最长上升连续子序列 II(二维最长上升连续序列)
题目链接:http://www.lintcode.com/zh-cn/problem/longest-increasing-continuous-subsequence-ii/ 最长上升连续子序列 I ...
- UVA11572-Unique Snowflakes-(最长不同连续子序列)
题意:给n个数,求最长不同连续子序列.n<=1e6. 解题过程: 1.记录数据存于数组 2.用左右指针l和r指向这段连续区间 3.右指针往右走,如果遇到没有存在于set集合的数就插入集合 否则左 ...
- lintcode-397-最长上升连续子序列
397-最长上升连续子序列 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列.(最长上升连续子序列可以定义为从右到左或从左到右的序列.) 注意事 ...
- lintcode_397_最长上升连续子序列
最长上升连续子序列 描述 笔记 数据 评测 给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列.(最长上升连续子序列可以定义为从右到左或从左到 ...
- BNUOJ 4215 最长公共连续子序列
最长公共连续子序列 Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java class ...
- 【TOJ 5065】最长连续子序列(前缀和)
Description 给定一系列非负整数,求最长的连续子序列,使其和是7的倍数. Input 第一行为正整数N(1<=N<=50000),接下来有N行,每行有一个非负整数,所有整数不大于 ...
- TOJ 5065: 最长连续子序列
5065: 最长连续子序列 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 140 ...
- lintcode:最长上升子序列
题目 最长上升子序列 给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度. 样例 给出[5,4,1,2,3],这个LIS是[1,2,3],返回 3 给出[4,2,4,5,3,7],这个L ...
- 最长连续公共子序列(LCS)与最长递增公共子序列(LIS)
最长公共子序列(不连续) 实际问题中也有比较多的应用,比如,论文查重这种,就是很实际的一个使用方面. 这个应该是最常见的一种了,不再赘述,直接按照转移方程来进行: 按最普通的方式就是,直接构造二维矩阵 ...
随机推荐
- ExtJS实战 01——HelloWorld
前言 Extjs5的发布已经有些日子了,目前的最新稳定版本是Extjs5.1.0,我们可以在官方网站进行下载.不过笔者今天访问得到的是502Bad Gateway,原因可能是sencha的nigix没 ...
- PHP 登录完成后如何跳转上一访问页面
访问网站页面时,有的页面需要授权才能访问,这时候就会要求用户登录,跳转到登录页面login.php,怎么实现登录后返回到刚才访问的页面 项目需求 访问网站页面时,有的页面需要授权才能访问,这时候就会要 ...
- 关于不同进制数之间转换的数学推导【Written By KillerLegend】
关于不同进制数之间转换的数学推导 涉及范围:正整数范围内二进制(Binary),八进制(Octonary),十进制(Decimal),十六进制(hexadecimal)之间的转换 数的进制有多种,比如 ...
- 感知器算法PLA
for batch&supervised binary classfication,g≈f <=> Eout(g)≥0 achieved through Eout(g)≈Ein(g ...
- 如何计算IP地址及CIDR(收藏)
如何计算IP地址及CIDR 一. IP地址概念 IP地址是一个32位的二进制数,它由网络ID和主机ID两部份组成,用来在网络中唯一的标识的一台计算机.网络ID用来标识计算机所处的网段:主 机ID用来标 ...
- PAT IO-04 混合类型数据格式化输入(5)
/* *PAT IO-04 混合类型数据格式化输入(5) *2015-08-01 作者:flx413 */ #include<stdio.h> int main() { int a; fl ...
- EditPlus64的安装配置
下载地址,直接到360下载即可,下载完毕之后,进入如下网址,完后在线生成注册码 http://www.jb51.net/tools/editplus/ 以上是文本编辑器EditPlus的安装以及注册, ...
- [原创]CentOS6.4编译安装Facebook的folly库(gcc4.8.1boost1.5.3)
Folly: Facebook Open-souce LibrarY,Facebook开源的一个基础组件库,据说在大规模的场景中性能较高.目前因为自己负责的系统有几个地方性能较差,因此特意找来看看 ...
- 完整DataTable与IList互换(转)
public class CollectionHelper { private CollectionHelper() { } public static DataTable ConvertTo< ...
- List<T>中Exists 和Contains的区别
.net编码中,使用泛型List<>时,经常遇到这样的需求:新来一个Model对象,如果已有的List中没有这条数据,则把新对象Add到List中,否则不处理 判断已有的List中是否包含 ...