动态规划-买卖股票的最佳时机 V
2020-03-11 18:19:00
问题描述:
给出一个股票n天的价格,每天最多只能进行一次交易,可以选择买入一支股票或卖出一支股票或放弃交易,输出能够达到的最大利润值
样例
样例 1:
给出 `a = [1,2,10,9]`, 返回 `16`
输入:
[1,2,10,9]
输出:
16
解释:
你可以在第一天和第二天买入股票,第三天和第四天卖出
利润:-1-2+10+9 = 16
样例 2:
给出 `a = [9,5,9,10,5]`, 返回 `5`
输入:
[9,5,9,10,5]
输出:
5
解释:
你可以在第2天买入,第4天卖出
利润:-5 + 10 = 5
注意事项
- 1 ≤ n ≤ 10000
问题求解:
之前Stock Problems里有遇到过k交易,每次手里至多有1个股票的问题;这里是一个扩展题,交易数量不限,而且手里的股票数量也不限。
网络上有人发了dfs的解,自己也尝试过使用dfs来做,但是是会TLE的,使用dfs不做剪枝操作理论的时间复杂度是指数级别的。
正确的解法是使用dp。
dp[i][j] : 前i天结束手里有j个股票所能达到的最大值
对于dp[i][j]就有三种策略,不做交易dp[i - 1][j],买入dp[i - 1][j - 1] - prices[i - 1],卖出dp[i - 1][j + 1] + prices[i - 1]。
边界条件再完善一下就可以了。
本题直接开dp[n + 1][n + 1]会MLE,需要使用滚动数组来降低空间复杂度才能AC。另外,感觉题目的test case比较水,没有达到10000的量级,上述的解的时间复杂度约为O(n ^ 2),理论上是过不了大数据的。尝试提交了一下,还是AC了。
时间复杂度 :O(n ^ 2)。
public int getAns(int[] a) {
int n = a.length;
int[] dp = new int[n + 1]; int[] presum = new int[n];
presum[0] = a[0];
for (int i = 1; i < n; i++) presum[i] = presum[i - 1] + a[i]; dp[0] = 0;
for (int i = 1; i <= n; i++) dp[i] = Integer.MIN_VALUE;
for (int i = 1; i <= n; i++) {
int[] prev = Arrays.copyOf(dp, n); dp[0] = Math.max(prev[0], prev[1] + a[i - 1]);
dp[i] = -presum[i - 1];
dp[i - 1] = Math.max(dp[i - 1], i >= 2 ? prev[i - 2] - a[i - 1] : Integer.MIN_VALUE); for (int j = 1; j <= i - 2; j++) {
dp[j] = Math.max(Math.max(prev[j], prev[j - 1] - a[i - 1]), prev[j + 1] + a[i - 1]);
}
}
return dp[0];
}
动态规划-买卖股票的最佳时机 V的更多相关文章
- [Leetcode][动态规划] 买卖股票的最佳时机IV
一.题目描述 给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格. 设计一个算法来计算你所能获取的最大利润.你最多可以完成 k 笔交易. 注意: 你不能同时参与多笔交易(你必须在再次购 ...
- Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock)
Leetcode之动态规划(DP)专题-121. 买卖股票的最佳时机(Best Time to Buy and Sell Stock) 股票问题: 121. 买卖股票的最佳时机 122. 买卖股票的最 ...
- Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II)
Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II) 股票问题: 121. 买卖股票的最佳时机 122. ...
- Leetcode之动态规划(DP)专题-123. 买卖股票的最佳时机 III(Best Time to Buy and Sell Stock III)
Leetcode之动态规划(DP)专题-123. 买卖股票的最佳时机 III(Best Time to Buy and Sell Stock III) 股票问题: 121. 买卖股票的最佳时机 122 ...
- Leetcode之动态规划(DP)专题-188. 买卖股票的最佳时机 IV(Best Time to Buy and Sell Stock IV)
Leetcode之动态规划(DP)专题-188. 买卖股票的最佳时机 IV(Best Time to Buy and Sell Stock IV) 股票问题: 121. 买卖股票的最佳时机 122. ...
- Leetcode之动态规划(DP)专题-714. 买卖股票的最佳时机含手续费(Best Time to Buy and Sell Stock with Transaction Fee)
Leetcode之动态规划(DP)专题-714. 买卖股票的最佳时机含手续费(Best Time to Buy and Sell Stock with Transaction Fee) 股票问题: 1 ...
- Java实现 LeetCode 714 买卖股票的最佳时机含手续费(动态规划 || 迭代法)
714. 买卖股票的最佳时机含手续费 给定一个整数数组 prices,其中第 i 个元素代表了第 i 天的股票价格 :非负整数 fee 代表了交易股票的手续费用. 你可以无限次地完成交易,但是你每次交 ...
- lintcode:买卖股票的最佳时机 IV
买卖股票的最佳时机 IV 假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格. 设计一个算法来找到最大的利润.你最多可以完成 k 笔交易. 注意事项 你不可以同时参与多笔交易(你必须在再次 ...
- lintcode:买卖股票的最佳时机 I
买卖股票的最佳时机 假设有一个数组,它的第i个元素是一支给定的股票在第i天的价格.如果你最多只允许完成一次交易(例如,一次买卖股票),设计一个算法来找出最大利润. 样例 给出一个数组样例 [3,2,3 ...
随机推荐
- Vimium - 让你体验Geek般的浏览体验
相信很多电脑高手们都会寻找一一些快捷高效的操作方式,如经常利用键盘的快速操作,让你脱离鼠标,可以让你不用花太多精力地去移动细小的指针进行操作,使得工作的效率提高许多. 不过,实际上很多时候我们还是不得 ...
- Quartz Tutorial 11 - Miscellaneous Features of Quartz
文章目录 Plug-Ins Quartz提供了一个接口(org.quartz.spi.SchedulerPlugin) 用于插入附加的功能. 与Quartz一同发布的,提供了各种实用功能的插件可以在o ...
- python基础知识的重新认识
昨天模拟书本上client和server交互的例子,代码明明是按照书上写的,可是就是出现了错误,像下面这样: # tcpserver from socket import * from time im ...
- Ubuntu pppoe宽带拨号相关问题
因为可视化界面没有相关设置,因此采用终端命令的方法. 测试环境:Ubuntu 18.0.4 pppoe的配置:$ sudo pppoeconf 然后进入此界面进行一系列宽带拨号的设置. 联网:$ su ...
- sql数据库在登录异常时 ora-03114:未连接到ORACLE怎么办
关闭SQL数据,重新启动,登录就好,不要用删除,或者其他方法,如果这麽做还是不可以,那么在想其他办法! 我自己就是这麽做的
- 使用contenteditable+div模拟textarea文本域实现高度自适应
使用contenteditable+div模拟textarea文本域实现高度自适应 开发过程中由于需要在发送消息的时候需要有一个可以高度自适应的文本域,一开始是使用textarea并搭配auto-si ...
- 使用web写UI, 使用js对接C++项目, 提高开发效率
ppt资源下载地址https://www.slidestalk.com/s/webui_nodejs_cmdlrx
- Java基础--Arrays类
Arrays工具类:用来操作数组(比如排序和搜索)的各种方法 常用方法: 使用二分法查找 Arrays.binarySearch(int[]array,int value); 数组内容转换成字符串的形 ...
- 安装archlinux的另辟蹊径的命令及心得
先说说我为什么开始入坑archlinux的吧,我最喜欢这个系统的一点就是简洁,DIY程度高,可以定制真正属于自己的专用系统.(像gentoo的话,就为了日常使用也没必要那么折腾,除非你是想在折腾的过程 ...
- 新建eclipse工作空间的常用设置
1.设置字体: Window->Preferences->(可以直接搜索font)General -> Appearance ->Colors and Fonts --> ...