[topcoder]ZigZag
http://community.topcoder.com/stat?c=problem_statement&pm=1259&rd=4493
动态规划题。如果不用DP,暴力的应当在2^n*n的复杂度吧。动态规划现在我的思维还老停留在一维而且没有第二层循环。但其实如果一开始的复杂度很高,稍微有几个循环,指数级别,一点问题没有。
题目描述:给出n个数:A[1], A[2], ... , A[n],求最长的子序列的长度,子序列中相邻数之间的差值是正负交替出现的。
f1[i]表示 最后一个数是A[i]并且A[i]和前一个数的差值为正的最长子序列的长度。
f2[i]表示最后一个数是A[i]并且A[i]和前一个数的差值为负的最长子序列的长度。
对于f1[i], 和它有联系的子问题是f2[j] (0<= j < i).f1[i] = max(f1[i], f2[j]+1) (A[i] > A[j])
对于f2[i], 和它有联系的子问题是 f1j] (0 <= j < I),f2[i] = max(f2[i], f1[j]+10 (A[i] < A[j])
计算子问题的顺序:A数组下标从小到大,顺推。
public class ZigZag {
public int longestZigZag(int[] sequence) {
if (sequence.length == 0) return 0;
int[] up = new int[sequence.length];
int[] down = new int[sequence.length];
up[0] = 1;
down[0] = 1;
int ret = 0;
for (int i = 1 ; i < sequence.length; i++) {
int max_up = 0;
int max_down = 0;
for (int j = 0; j < i; j++) {
if (sequence[j] > sequence[i]) {
if (down[j] > max_down) max_down = down[j];
}
else if (sequence[j] < sequence[i]) {
if (up[j] > max_up) max_up = up[j];
}
}
up[i] = max_down + 1;
down[i] = max_up + 1;
if (up[i] > ret) ret = up[i];
if (down[i] > ret) ret = down[i];
}
return ret;
}
}
[topcoder]ZigZag的更多相关文章
- [Topcoder]ZigZag(dp)
题目链接:https://community.topcoder.com/stat?c=problem_statement&pm=1259&rd=4493 题意:给一串数字,求出最长的波 ...
- DP练习(初级):ZigZag
题目来源:http://community.topcoder.com/stat?c=problem_statement&pm=1259&rd=4493 类似于求最长子串的方法.dp[0 ...
- [LeetCode] Zigzag Iterator 之字形迭代器
Given two 1d vectors, implement an iterator to return their elements alternately. For example, given ...
- [LeetCode] Binary Tree Zigzag Level Order Traversal 二叉树的之字形层序遍历
Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to ...
- [LeetCode] ZigZag Converesion 之字型转换字符串
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- 【leetcode】ZigZag Conversion
题目简述 The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows ...
- 整数压缩编码 ZigZag
在分析Avro源码时,发现Avro为了对int.long类型数据压缩,采用Protocol Buffers的ZigZag编码(Thrift也采用了ZigZag来压缩整数). 1. 补码编码 为了便于后 ...
- No.006:ZigZag Conversion
问题: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
- ZigZag Conversion leetcode java
题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...
随机推荐
- abstract
/// <summary> /// 抽象类不能被直接实例化 /// is a /// </summary> public abstract class BasePhone { ...
- 采用HttpModules来重写URLS
首先写一个处理URLs重写的类,并且这个类必须继承IHttpHandler接口,以博客园的程序为例: public class UrlReWriteModule : System.Web.IHttpM ...
- WF4.0 基础篇 (十八) Flowchar
本节主要介绍WF4 中 Flowchart的使用 本文例子下载: http://files.cnblogs.com/foundation/FlowcharSample.rar 本文例子说明 Flowc ...
- css3学习笔记之用户界面
CSS3 调整尺寸(Resizing) CSS3中,resize属性指定一个元素是否应该由用户去调整大小. 这个 div 元素由用户调整大小. (在 Firefox 4+, Chrome, 和 Saf ...
- Mysql 数据库安装配置
MySQL的多种安装方法 在当今的互联网企业,Mysql数据服务几乎都是运行在LINUX系统操作系统上,当然你也可以在WINDOWS.UNIX等商业操作系统上运行. 但是一般企业都会采用LNMP.LA ...
- javascript显示倒计时控制按钮
html: <a><span id="sendAgain" onclick="sendEmail()">2.再次发送激活邮件</s ...
- mac 上的版本控制工具SmartSVN9.0.4(破解版)
附带上破解版安装说明: 1.在MAC上选中SmartSVN.dmg,右键->打开2.双击syntevo_keygen.jar 如果没有安装java会自动提示安装的3.输入Name Email(随 ...
- memcached 使用积累
1.memcahed在windows上的安装 . 下载memcache的windows稳定版,解压放某个盘下面,比如在c:\memcached . 在终端(也即cmd命令界面)下输入 ‘c:\memc ...
- Unity学习笔记(3):获取对象
在上一篇文章中(Unity映射注册)中概要介绍了Unity中的映射机制,本节主要介绍对象获取,包括默认获取,通过名称获取,获取全部对象,同时通过加载配置文件,然后再获取对象. 通过代码获取对象 方式1 ...
- dapper 写查询sql 时,多条件参数操作方法
var args = new DynamicParameters(new {}); if (obj.orderId != null) { sb.Append(" AND OrderId = ...