class Solution { public: Solution(){} int maxProfit(int K, vector<int> &prices) { vector<int> lowVec; vector<int > highVec; if(prices.size() <=1){ return 0; } prices.erase(std::unique(prices.begin(),prices.end()),prices.end()); if(prices.size() <=1){ return 0; } lowVec.reserve(prices.size()/2); highVec.reserve(prices.size()/2); if(prices[0]<prices[1]){ lowVec.push_back(prices[0]); } for(int i=1;i<prices.size()-1;i++){ int low; int cur = prices[i]; if(cur<prices[i+1] && cur<prices[i-1]){ lowVec.push_back(cur); } if(cur>prices[i-1]&&cur>prices[i+1]){ highVec.push_back(cur); } } if(prices[prices.size()-2]<prices[prices.size()-1]){ highVec.push_back(prices.back()); } int N = lowVec.size(); if(K>=N){ int sum=0; for(int i=0;i<N;i++){ sum += highVec[i]-lowVec[i]; } return sum; } vector<vector<int> > opt ; opt.resize(K+1); for(int i=0;i<K+1;i++) { opt[i].resize(N); } vector<int>diff; diff.reserve(lowVec.size()); int sum=0; for(int i=0;i<N;i++){ sum += (highVec[i]-lowVec[i]); diff.push_back(sum); } for(int k=1;k<=K;k++) { for(int i=0;i<k;i++){ opt[k][i]= diff[i]; } } for(int i=0;i<N;i++){ opt[0][i]=0; } for(int k=1;k<=K;k++) { for(int i=k;i<N;i++) { opt[k][i] = max(opt[k][i-1],opt[k-1][i-1]+highVec[i]-lowVec[i]); opt[k][i] = max(opt[k][i],highVec[i]-lowVec[0]); for(int t=i-1;t>=k-1 && t>0;t--){ int highDiff = highVec[i]-highVec[t]; int lowDiff = lowVec[i]-lowVec[t]; if(highDiff>0 && lowDiff>0){ opt[k][i]=max(opt[k][i],opt[k-1][t-1]+highVec[i]-lowVec[t]) ; } else break; } } } return opt[K][N-1]; } };
188 | Best Time to Buy and Sell Stock IV |
说明:有个地方不同其他程序。即先删除一些无用的状态(即非波峰波谷,这些状态属于中间态,因此,肯定赚钱不了的),比如 {2,3,4,3,2}其中的3就是无用状态。对于最后一个元素,如果不是涨价,也是无用,第一个元素,如果不比第二个元素小,也是无效状态
动态规划的主要公式:
opt[k][i]=max(opt[k][i],opt[k-1][t-1]+highVec[i]-lowVec[t])
即,如果选择当前第i个股价卖出,那么,需要选取第t个股价买入(0<=t<i),同时在t前面选择k-1个操作即opt[k-1][t-1]
相关推荐
Java是一种高性能、跨平台的面向对象编程语言。它由Sun Microsystems(现在是Oracle Corporation)的James Gosling等人在1995年推出,被设计为一种简单、健壮、可移植、多线程、动态的语言。Java的主要特点和优势...
Best Time to Buy and Sell Stock IV Best Time to Buy and Sell Stock with Cooldown Interleaving String Scramble String Minimum Path Sum Edit Distance Decode Ways Distinct Subsequences Word Break Word ...
公众号 coding 笔记、点滴记录,以后的文章也会...最近花时间分门别类整理了 LeetCode 的前 500 题,把相似的题目都放在了一起,比如Best Time to Buy and Sell Stock的6道题,这些题目放在一起刷效果更好。 简书博客:
圆和椭圆重叠leetcode ——#158 尖端 关心特殊情况 从不同的方向思考 简单的 大批 1.Two Sum -> 使用哈希表避免遍历列表448.查找数组中消失的所有数字-> 1.建立缓冲区来计算数字| 2.使用数组作为带符号的缓冲区118....
股票买卖最佳时机leetcode 使用机器学习进行纳斯达克 100 股票预测分析 目录 描述 此 Web 应用程序通过 Scikit-Learn 使用前 6 个月的历史价格教机器学习,从而实现机器学习以预测历史预测。该应用程序通过 AWS 部署...
leetcode csdn Leetcode Leetcode题解(C++版),代码 + 详细博客说明 ! 所有内容见博客专栏:小题大做——Leetcode算法 欢迎提出任何问题和建议! 本人博客: 邮 箱 :
leetcode 溢价leetcode-常见问题 ...Handbook中问题的Python实现——LeetCode 50个常见面试题 Blocked表示该问题仅适用于 Leetcode Premium 已验证/未验证表示问题解决方案已被 Leetcode 接受/未测试
Repo——LeetCode_Python(还没创建),这个主要为面试作准备,可能会进行算法上的训练。 由于我比较穷,没钱开vip,只能做一些比较基础的题目qwq。 联系方式 Blog: Email: GitHub: 目前解题进度 基础练习( 16 / 34...
leetcode中国 Onsite: 第一轮:三哥加国人哥:问简历,然后利口 爸气留 寺尔 幺灵幺 第二轮:三哥 利口 伞伞 伞尔尔变种 第三轮:白人哥加国人小姐姐 一道很简单的binary ...
LeetCode book——CleanCodeHandbook_v1.0.1
201 | [Bitwise AND of Numbers Range](https://leetcode.com/problems/bitwise-and-of-numbers-range/) | [C++](./C++/bitwise-and-of-numbers-range.cpp) [Python](./Python/bitwise-and-of-numbers-range.py) | _...
https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock/ * * 思路: * 股票只能买卖一次 T+1 操作 * 最大利润 = 最高点 - 最低点 * 并且 最高点只能在 最低点的后面 * * */ public int maxProfit_1(int...
—————————————————— 20200716发现LeetCode上面有个打牌功能,就是每天会随机挤压一道题给我,完成此题便打卡成功。给的题序号跳动比较大,例如今天的题是第785题,属于中等复杂题型,不大好进行...
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/number-of-islands 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 思路 用宽度优先搜索思想,将一个根节点(取
现在leetcode总的题目数已经达到150题,所以有部分题目没有包含在这个文档中,但是——足够了。po主刷leetcode的时候参照了这份文档中的难度分级,从1开始刷到5,最终刷完150题。当然里面的题目难度分级对每个人来说...
【leetcode】另一棵树的子树 c++(csdn)————程序
vscode安装leetcode TypeScript 中的 LeetCode 解决方案 解决时间和空间复杂度的有效方法 在节点上运行(ts-node) 由 nodemon 自动监视和重新加载文件 经摩卡全面测试 有帮助的评论 测试 $ npm test 由 nodemon ...
大佬的leetcode刷题笔记(c++版本)
Leetcode、剑指Offer——名企面试官精讲典型编程题
股票买卖最佳时机leetcode 评估前端架构 编码模式。 组件雇佣制和组织 如果需要,使用预先React功能。 在时间范围内从模型升级设计 解决方案 跑步 克隆这个项目并 cd 到项目中 运行 npm 安装 运行 npm 服务 建筑学 ...