牛牛的数列
来源:互联网 发布:网络综艺收视率 编辑:程序博客网 时间:2024/04/27 21:52
牛牛现在有一个n个数组成的数列,牛牛现在想取一个连续的子序列,并且这个子序列还必须得满足:最多只改变一个数,就可以使得这个连续的子序列是一个严格上升的子序列,牛牛想知道这个连续子序列最长的长度是多少。
输入描述:
输入包括两行,第一行包括一个整数n(1 ≤ n ≤ 10^5),即数列的长度;
第二行n个整数a_i, 表示数列中的每个数(1 ≤ a_i ≤ 10^9),以空格分割。
输出描述:
输出一个整数,表示最长的长度。
输入例子:
6
7 2 3 1 5 6
输出例子:
5
AC代码:
import java.util.Arrays;import java.util.Scanner;public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in); int N = in.nextInt(); int[] pre = new int[100005]; //从前往后最大递增子序列 int[] suf = new int[100005]; //从后往前最大递增子序列 int[] num = new int[100005]; Arrays.fill(pre,1); Arrays.fill(suf, 1); for ( int i = 1 ; i <= N ; i++){ num[i] = in.nextInt(); } for ( int i = 1 ; i <= N ; i++){ if ( num[i] > num[i-1]){ pre[i] = pre[i-1]+1; } } for ( int i = N ; i >= 1 ; i--){ if (num[i] < num[i+1]){ suf[i] = suf[i+1]+1; } } int res = 1; for(int i = 1 ; i <= N ; i++){ res = Math.max(res, pre[i-1]+1); res = Math.max(res, suf[i+1]+1);//以上两步是在找当前最长递增子序列,无论正的或者反的 if(num[i+1] - num[i-1] >= 2){ res = Math.max(res, pre[i-1]+suf[i+1]+1); } } System.out.println(res); in.close(); }}
阅读全文
0 0
- 牛牛的数列
- 【算法题】牛牛的数列
- 牛牛的数列-Java-牛客模拟三
- 牛客网 [编程题] 牛牛的数列 (DP)
- 数列与数列的极限
- 几个特殊的数列(数列全集)
- Pell数列--斐波拉契数列的“进化”
- BZOJ1635 [Usaco2007 Jan]Tallest Cow 最高的牛 数列差分
- 傻牛的递推数列(数论,斐波那契)
- 牛客练习赛7 E 珂朵莉的数列 (只有思路)
- 牛客练习赛7 E 珂朵莉的数列 所有子区间逆序对
- 奇怪的数列
- Fibonacci数列的计算
- 我的Fabonacci数列
- 奇妙的心电图数列
- Fibonacci数列的实现
- 1080 奇怪的数列
- [HNOI2009]有趣的数列
- Java 中的锁
- linux 常见命令
- 导出数据库方法
- Pro ASP.NET Core MVC(一)【前世今生】
- redis添加开机启动
- 牛牛的数列
- alsa分析:alsa的那些配置文件 ( 1 )
- Pycharm使用教程
- 2015蓝桥杯决赛 完美正方形(深搜DFS)
- 【C++】名字查找与类的作用域
- What is 'JNDI'? What does 'JDNI' do?
- 本地oracle可以通过localhost连接,无法通过ip地址连接解决方法
- 做技术的思路
- js DOM对象