博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode "Wiggle Subsequence" !
阅读量:4975 次
发布时间:2019-06-12

本文共 2275 字,大约阅读时间需要 7 分钟。

Another interesting DP. Lesson learnt: how you define state is crucial..

1. if DP[i] is defined as, longest wiggle(up\down) subseq AT number i, you will have O(n^2) solution

class Solution {    struct Rec    {        Rec(): mlen_dw(0), mlen_up(0){}        Rec(int ldw, int lup): mlen_dw(ldw), mlen_up(lup){}        int mlen_dw;        int mlen_up;    };public:    int wiggleMaxLength(vector
& nums) { int n = nums.size(); if(n < 2) return n; vector
dp(n); dp[0].mlen_up = dp[0].mlen_dw = 1; int ret = 1; for(int i = 1; i < n; i ++) { int cv = nums[i]; for(int j = i - 1; j >= max(0, ret - 2); j --) { if(cv > nums[j]) { dp[i].mlen_up = max(dp[i].mlen_up, dp[j].mlen_dw + 1); } else if(cv < nums[j]) { dp[i].mlen_dw = max(dp[i].mlen_dw, dp[j].mlen_up + 1); } ret = max(ret, max(dp[i].mlen_dw, dp[i].mlen_up)); } } return ret; }};

2. if DP[i] is defined as, longest wiggle(up\down) subseq SO FAR UNTIL number i, you will have O(n) solution

class Solution {    struct Rec    {        Rec(): mlen_dw(0), mlen_up(0){}        Rec(int ldw, int lup): mlen_dw(ldw), mlen_up(lup){}        int mlen_dw;        int mlen_up;    };public:    int wiggleMaxLength(vector
& nums) { int n = nums.size(); if(n < 2) return n; vector
dp(n); dp[0].mlen_up = dp[0].mlen_dw = 1; int ret = 1; for(int i = 1; i < n; i ++) { int cv = nums[i]; dp[i] = dp[i - 1]; if(cv > nums[i - 1]) { dp[i].mlen_up = max(dp[i].mlen_up, dp[i - 1].mlen_dw + 1); } else if(cv < nums[i - 1]) { dp[i].mlen_dw = max(dp[i].mlen_dw, dp[i - 1].mlen_up + 1); } ret = max(ret, max(dp[i].mlen_dw, dp[i].mlen_up)); } return ret; }};

3. And, there's always smarter solution - GREEDY!

转载于:https://www.cnblogs.com/tonix/p/5700042.html

你可能感兴趣的文章
POJ 2886 Who Gets the Most Candies(线段树+约瑟夫环)
查看>>
艺术来源于生活,高于生活,端午节期间自创一首打油诗
查看>>
一个图片裁剪控件
查看>>
poj2104(主席树。k_th number)
查看>>
java内存模型(一)
查看>>
飞入动画
查看>>
mysql通过binlog恢复删除数据
查看>>
正则表达式
查看>>
【windows】之查看端口占用
查看>>
coocs2d-x-2.2(-js相同)版本android打包笔记
查看>>
分析DuxCms之AdminUserModel
查看>>
uva 12304 2D Geometry 110 in 1! (Geometry)
查看>>
HTML连载13-CSS基本格式以及文字相关的属性
查看>>
idea 修改Git密码和账号方法
查看>>
mysql用户权限
查看>>
C/C++中的abort、atexit、exit和_Exit
查看>>
R语言从基础入门到高级
查看>>
JSP:在本地获取图片后立即展示选择的图片
查看>>
docker 安装mongo
查看>>
DDL、DML和DCL的区别与理解
查看>>