华为OJ试题整理
2016-04-12 16:57
357 查看
华为OJ试题整理
1.合唱队
分析:
涉及到最长上升子序列和最长下降子序列的问题。
首先设以第i个人为中间的Ti,则求出从前往后到第i个人的最长上升子序列,然后求出从第i个人到最后一个人的最长下降子序列。得到的总长度为最长的合唱队长队。
最长上升自序列的算法:
对于原始数组org[];new一个新的数组result[],用来存储原始数组里每一个元素的最长上升子序列的长度。对于i每一个元素来说,自己一定是自己的子集,所以初始化为1.首先对任意一个元素org[i]而言,在org[0]~org[i]中寻找最长的上升子序列。如果在这段数据中,org[j]的最长上升子序列的长度为result[j],org[i]的最长公共子序列一定包括org[j]的{最长上升子序列,org[i]},所以长度为org[j]+1.
最长下降子序列的思路与上面相似。
1.合唱队
分析:
涉及到最长上升子序列和最长下降子序列的问题。
首先设以第i个人为中间的Ti,则求出从前往后到第i个人的最长上升子序列,然后求出从第i个人到最后一个人的最长下降子序列。得到的总长度为最长的合唱队长队。
最长上升自序列的算法:
对于原始数组org[];new一个新的数组result[],用来存储原始数组里每一个元素的最长上升子序列的长度。对于i每一个元素来说,自己一定是自己的子集,所以初始化为1.首先对任意一个元素org[i]而言,在org[0]~org[i]中寻找最长的上升子序列。如果在这段数据中,org[j]的最长上升子序列的长度为result[j],org[i]的最长公共子序列一定包括org[j]的{最长上升子序列,org[i]},所以长度为org[j]+1.
最长下降子序列的思路与上面相似。
package com.whu.wsy; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto-generated method stub Scanner scanner = new Scanner(System.in); int num = scanner.nextInt(); int [] height = new int[num]; int [] heightUp = new int[num]; int [] heightDown = new int[num]; int t = 0; for (int i = 0; i < num; i++) { height[i] = scanner.nextInt(); } ListUp(height, heightUp); ListDown(height, heightDown); for (int i = 0; i < num; i++) { if (t < heightDown[i] + heightUp[i]) { t = heightDown[i] + heightUp[i]; } } System.out.println(num - t +1); } private static void ListDown(int[] org, int[] result) { // TODO Auto-generated method stub int N = org.length; for (int i = 0; i < N; i++) { result[i] = 1;//初始化时对每一个元素而言,自己的最长升序子序列的个数都只有一个 } for (int i = N-2; i >1 ; i--) { for (int j = N-1; j > i; j--) { if (org[i]>org[j] && result[i] < result[j]+1) { result[i] = result[j] + 1; } } } } private static void ListUp(int[] org, int[] result) { // TODO Auto-generated method stub int N = org.length; for (int i = 0; i < N; i++) { result[i] = 1;//初始化时对每一个元素而言,自己的最长升序子序列的个数都只有一个 } for (int i = 1; i < N; i++) { for (int j = 0; j < i; j++) { if (org[i]>org[j] && result[i] < result[j]+1) { result[i] = result[j] + 1; } } } } }
相关文章推荐
- Android Volley完全解析(三),定制自己的Request
- android开发 系统信息相关工具类 权限管理页面
- 支付宝java后台接入简单流程
- 一个MEX程序示例
- Anroid ListView分组和悬浮Header实现
- Oracle 删除重复数据只留一条
- 《区块链:从入门到放弃》之obc安装步骤
- 半年收入超2亿RMB 独立游戏开发者的艰苦创业路
- WEB开发:如何用js来模拟服务器的ajax响应,不依赖服务器来编写前端代码
- 刚换了新账号
- 【CodeForces 628B】 New Skateboard (数学水)
- flask restfull 快速入手
- Poj 3259 Wormholes【spfa 负环判断】
- 作业:C++作业3
- VirtualBOX 虚拟机安装 OS X 10.9 Mavericks 及 Xcode 5,本人X220亲测
- Picasso-A powerful image downloading and caching library for Android
- HDU 1080 Human Gene Functions 带权的最长公共子序列
- java AES加密
- Android Volley完全解析(二),使用Volley加载网络图片
- Socket