当前位置: 首页 > news >正文

Best Time to Buy and Sell Stock IV股票交易(hard)--力扣101算法题解笔记

7.8Best Time to Buy and Sell Stock IV股票交易(hard)

题目描述

给定一段时间内每天的股价,已知你只可以买卖各k次,且每次只能拥有一支股票,求最大的收益

输入输出样例

Input :[3, 2, 6, 5, 0, 3] , k = 2

Output:7

最大的利润在第二天价格为2的时候买入,第三天价格为6的时候卖出,在第五天的价格为0时候买入,第六天价格为3的时候卖出。

题解

如果k>总天数,那就一赚钱就卖了,如果k<总天数,就比较麻烦了。

先建立两个动态数组buy和sell,对于每天的股价,buy[j]表示第j次买入时的最大收益,sell[j]表示在第j次卖出时的最大收益。

#include <iostream> #include <vector> #include <climits> using namespace std; /** * @brief 无限次交易的最大利润(当k >= 天数/2时等价于无限次) * @param prices 股价数组(值传递改为引用,提升效率) * @return 最大利润 * 逻辑:只要后一天股价比前一天高,就买入卖出赚差价(贪心策略) */ int maxProfitUnlimited(vector<int>& prices) { int maxProfit = 0; // 初始化最大利润为0 // 遍历每天的股价(从第2天开始,因为要和前一天比较) for (int i = 1; i < prices.size(); ++i) { // 如果当天股价 > 前一天股价,说明能赚钱,累加差价 if (prices[i] > prices[i - 1]) { maxProfit += prices[i] - prices[i - 1]; } } return maxProfit; } /** * @brief 最多k次交易的最大利润(每次只能持有1支股票,先买后卖) * @param k 最大交易次数(买卖算一次完整交易) * @param prices 股价数组(引用传递避免拷贝) * @return 最大收益 * 核心:动态规划,用buy[j]和sell[j]记录第j次交易的状态 */ int maxProfit(int k, vector<int>& prices) { int days = prices.size(); // 总天数 // 边界条件1:天数<2(至少2天才能完成一次买卖),利润为0 if (days < 2) { return 0; } // 边界条件2:k >= 天数/2 → 等价于无限次交易(一次交易至少2天,超过天数/2就无限制) if (k >= days / 2) { return maxProfitUnlimited(prices); } // 动态规划数组定义(核心) // buy[j]:完成第j次买入后,当前持有股票的最大利润(初始INT_MIN表示"不可能持有") // sell[j]:完成第j次卖出后,当前不持有股票的最大利润(初始0表示"无交易时利润为0") vector<int> buy(k + 1, INT_MIN), sell(k + 1, 0); // 遍历每一天的股价,更新每一次交易的状态 for (int i = 0; i < days; ++i) { // 遍历每一次交易(从第1次到第k次) for (int j = 1; j <= k; ++j) { // 状态转移1:更新第j次买入的最大利润 // 两种选择: // 1. 不操作:保持之前第j次买入的状态 → buy[j] // 2. 操作:用第j-1次卖出的利润,买入当天的股票 → sell[j-1] - prices[i] // 取两者最大值(追求利润最大化) buy[j] = max(buy[j], sell[j - 1] - prices[i]); // 状态转移2:更新第j次卖出的最大利润(核心修正:原代码是减号,已改为加号) // 两种选择: // 1. 不操作:保持之前第j次卖出的状态 → sell[j] // 2. 操作:卖出第j次买入持有的股票 → buy[j] + prices[i] // 取两者最大值 sell[j] = max(sell[j], buy[j] + prices[i]); } } // 最终结果:完成k次卖出后的最大利润(不持有股票时利润最大) return sell[k]; } int main() { // 测试用例:股价数组 + 最大交易次数k=2 vector<int> prices{ 3,2,6,5,0,3 }; int k = 2; // 输出结果:7(交易1:2买6卖,利润4;交易2:0买3卖,利润3 → 总7) cout << maxProfit(k, prices) << endl; return 0; }
http://www.jsqmd.com/news/438690/

相关文章:

  • 2026年评价高的脚手架厂家推荐:工程脚手架/东莞搭脚手架/钢管脚手架租赁值得信赖厂家推荐(精选) - 品牌宣传支持者
  • 嘉兴节能空压机认证厂家推荐,口碑好的节能空压机厂家排行 - 工业品网
  • 广州市企亮展览服务好用吗?从客户案例看其服务实力 - 工业品网
  • 机考刷题之 3 LeetCode 509 斐波那契数列
  • 瑞祥商联卡闲置别烂手里!过来人亲测靠谱回收,再也不被坑 - 团团收购物卡回收
  • 开发工具idea 安装插件后跟其他插件冲突无法启动的解决方案
  • 2026年上海太平洋推荐:太平洋房产/太平洋房屋/太平洋中介靠谱的中介 - 品牌宣传支持者
  • ERROR: Failed building wheel for pygame
  • 2026年深圳无线供电技术服务公司排名,哪家口碑好靠谱 - 工业品牌热点
  • “现在的AI就像1880年的笨重工厂!”微软CSO斯坦福泼冷水:别急着造神
  • Linux系统-应用问题全面剖析Ⅵ:德承工控机GP-3100在Ubuntu操作系统下[卡顿/死机]的排查与解决方法 - Johnny
  • 别让微信立减金烂在手里!亲测靠谱的闲置卡券变现方法 - 团团收购物卡回收
  • AI“真人”微短剧爆发:短剧配乐成核心竞争力,版权合规与曲多多解决方案
  • 2025年氢氧化镁优质生产厂家大盘点,氢氧化镁有哪些优选品牌推荐与解析 - 品牌推荐师
  • 从零搭建Openclaw
  • 智驾安全的“隐形上限”:为何测距与角分辨率决定AEB的生死时速,激光雷达或成新时代“安全带”
  • TCP vs UDP:有什么区别?从原理到应用场景全面解析
  • 2026制氧机品牌排行:这些优质厂家值得你关注,制氧机/制氮机,制氧机批发厂家找哪家 - 品牌推荐师
  • 2026 中国大健康创业靠谱推荐 高成功率热门赛道企业榜单 - 品牌智鉴榜
  • Dify 入门系列(七):从零到一搭建AI工作流——用“拖拽连线“替代代码,5分钟做出文本摘要器
  • 当电网遇上燃气:能源系统的双人舞
  • 2026年广州好用的软硬件结合专利AI、精准农业专利AI、质量控制专利AI品牌推荐 - 工业品牌热点
  • Apache DolphinScheduler 2 月社区动态:功能升级与优化齐飞
  • 有了MESI协议,为什么Java还需要内存模型(JMM)? - 指南
  • 自定义漏洞扫描引擎实现:基于规则引擎与语义分析的深度探测
  • 聊聊深圳好用的激光焊接机,大粤激光口碑如何,选哪家? - myqiye
  • os模块
  • 微信立减金回收价格新鲜出炉,回收三步完成 - 京回收小程序
  • 内网渗透-实战|手把手教你如何进行内网渗透
  • 共话柴油发电机组认证厂家,百发动力在各地的服务质量和费用情况 - 工业品牌热点