大家好,今日打卡分享股票系列进阶算法题「买卖股票的最佳时机 II」。本题是121题的升级版本,核心从单次交易升级为允许多次买卖,是贪心算法进阶应用的经典题型,也是大厂笔试高频考点。
题目题意
给定股票每日价格数组,交易规则:
1. 可以无限次买入卖出股票
2. 任意时刻最多只能持有1股(必须先卖出才能再次买入)
3. 同一天可以多次买卖(无实际收益,不影响结果)
目标:计算可获取的最大总利润;无获利时返回0。
核心解题思路:贪心累加所有正差值
本题最优解法的核心逻辑非常巧妙:
- 股价上涨区间的利润,等价于所有相邻上涨差值的总和
- 例如: [1,3,5] 一次性买入卖出利润 = 5-1 = (3-1)+(5-3)
- 遍历所有相邻交易日,只要后一天价格更高,就累加利润差值;下跌区间直接跳过
全程仅一次遍历,时间复杂度O(n),空间复杂度O(1),是本题最优解法。
样例原理讲解
输入 prices = [7,1,5,3,6,4] :
- 相邻正差值: 5-1=4 、 6-3=3
- 总利润 = 4+3 = 7,与样例输出完全匹配
输入 prices = [1,2,3,4,5] :
- 所有相邻差值累加: 1+1+1+1 = 4 ,等价于一次性买卖利润
C++完整AC代码实现
class Solution {
public:
int maxProfit(vector<int>& prices) {
int profit = 0;
for(int i = 1; i < prices.size(); i++){
// 只累加上涨的利润,下跌利润取0
profit += max(prices[i] - prices[i-1], 0);
}
return profit;
}
};
算法考点总结
这道题是贪心思想的进阶应用:局部最优(每次上涨都获利)可以推导出全局最优(总利润最大)。
掌握这套「累加正差值」的模板,能快速区分单次/多次股票交易的解题差异,是动态规划、贪心算法入门的关键里程碑。
LeetCode 122 买卖股票的最佳时机 多笔交易贪心算法 C++进阶题解
张小明
前端开发工程师
Windows Cleaner:你的Windows系统智能管家,告别C盘爆红卡顿烦恼
Windows Cleaner:你的Windows系统智能管家,告别C盘爆红卡顿烦恼 【免费下载链接】WindowsCleaner Windows Cleaner——专治C盘爆红及各种不服! 项目地址: https://gitcode.com/gh_mirrors/wi/WindowsCleaner 还在为Windows电脑越用越慢…
保姆级图解:用Wireshark抓包实战分析PCIe链路训练全过程(LTSSM状态机)
从零开始:用Wireshark解码PCIe链路训练的每一个状态跳转 当两块PCIe设备首次相遇时,它们会经历一场精密的"握手仪式"——链路训练。这个过程就像两个陌生人初次见面时的试探与磨合,只不过发生在纳秒级的时间尺度上。本文将带你用Wi…
RK3588 开发实战:从零构建定制化Ubuntu根文件系统
1. RK3588开发环境搭建与准备工作 第一次接触RK3588开发板时,我被它强大的性能所震撼。这款采用ARM Cortex-A76/A55架构的处理器,不仅支持8K视频解码,还具备强大的AI加速能力。但在实际开发中,我发现官方提供的系统镜像往往无法满…
终极指南:5分钟搭建AO3镜像站点,突破网络访问限制
终极指南:5分钟搭建AO3镜像站点,突破网络访问限制 【免费下载链接】AO3-Mirror-Site 项目地址: https://gitcode.com/gh_mirrors/ao/AO3-Mirror-Site 当AO3突然无法访问,无数创作者和读者陷入困境时,AO3-Mirror-Site开源项…
Figma中文插件快速上手指南:3分钟让英文界面变中文的完整教程
Figma中文插件快速上手指南:3分钟让英文界面变中文的完整教程 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN 你是否在使用Figma时被满屏的英文术语困扰?"A…
Applite镜像配置实战指南:三分钟解决Homebrew下载难题
Applite镜像配置实战指南:三分钟解决Homebrew下载难题 【免费下载链接】Applite User-friendly GUI macOS application for Homebrew Casks 项目地址: https://gitcode.com/gh_mirrors/ap/Applite 你是否曾经在macOS上使用Homebrew安装软件时,面对…