C语言股票系列硬核难题精讲 允许多次买卖的最大利润 贪心算法进阶思维深度剖析
从121题(单次买卖)到122题(多次买卖),思维从「找一对最值」升级为「累加所有正收益」,吃透这道题,股票系列所有基础题就能全部通关,后续带冷冻期、带手续费的进阶股票题,都是在此基础上扩展。这种「拆分问题、局部最优推全局最优」的思路,不仅适用于股票问题,在区间求和、利润最大化、任务调度类算法中都能通用,是进阶算法思维的核心。真正的满分解法,核心逻辑一句话:所有上涨的小波段利润,全部累加起来,就是
在C语言数组算法笔试中,「买卖股票最佳时机II」是从单次交易到多次交易的分水岭难题,也是很多同学贪心思维进阶的关键卡点。
很多同学会沿用单次交易的思路,试图找全局最高最低点,结果逻辑混乱、边界出错;而真正的最优解法,藏着「拆分上涨区间」的贪心核心逻辑,今天彻底拆解这道进阶难题。
一、经典笔试原题(进阶版)
给定一个整数数组 prices ,代表股票每日价格,交易规则升级:
1. 可以无限次买入、卖出股票(多笔交易)
2. 任意时刻最多只能持有1股,必须先卖出才能再次买入
3. 同一天可以买卖多次(无实际收益,不影响结果)
要求:设计时间复杂度最优的算法,计算能获取的最大总利润;无获利时返回0。
二、核心难点拆解
难点1:和单次交易题的思维陷阱
很多同学学完121题(单次买卖)后,会惯性找「全局最低点+全局最高点」,但在允许多次交易时完全失效:
例: [7,1,5,3,6,4]
- 单次最优:1买入6卖出,利润5
- 多次最优:1买5卖(利润4)+3买6卖(利润3),总利润7
贪心逻辑完全不同,不能沿用旧思路。
难点2:最优解的贪心核心——拆分上涨区间
真正的满分解法,核心逻辑一句话:所有上涨的小波段利润,全部累加起来,就是全局最大利润
底层数学原理:
连续上涨区间 [a1,a2,a3...an] ,一次性买入卖出利润 = an - a1
等价于拆分累加: (a2-a1)+(a3-a2)+...+(an - a(n-1))
所以:只要后一天价格比前一天高,就把这个差值利润赚到,下跌区间直接跳过,全程无遗漏。
难点3:边界条件与无效交易处理
- 数组长度≤1:无法交易,直接返回0
- 价格持续下跌:所有差值为负,利润累加0,自动返回0
- 同一天买卖:差值为0,不影响利润,无需特殊处理
三、C语言完整可运行最优代码
#include <stdio.h>
int maxProfit(int* prices, int pricesSize) {
// 边界特判:无法交易
if (pricesSize <= 1) return 0;
int totalProfit = 0;
// 遍历所有相邻交易日,从第2天开始
for (int i = 1; i < pricesSize; i++) {
// 计算当天和前一天的价格差
int diff = prices[i] - prices[i - 1];
// 只累加上涨的利润,下跌利润直接舍弃(加0)
if (diff > 0) {
totalProfit += diff;
}
}
return totalProfit;
}
int main() {
int arr1[] = {7, 1, 5, 3, 6, 4};
printf("样例1最大利润:%d\n", maxProfit(arr1, 6)); // 输出7
int arr2[] = {1, 2, 3, 4, 5};
printf("样例2最大利润:%d\n", maxProfit(arr2, 5)); // 输出4
int arr3[] = {7, 6, 4, 3, 1};
printf("样例3最大利润:%d\n", maxProfit(arr3, 5)); // 输出0
return 0;
}
四、易错难点深度剖析
1. 不要试图手动拆分买卖区间
新手容易写复杂逻辑,判断何时买入、何时卖出,代码臃肿还容易出错;最优解只需要遍历+累加正差值,一行核心逻辑搞定。
2. 时间复杂度碾压暴力解法
暴力枚举所有买卖组合是O(n²),而贪心解法仅O(n)一次遍历,大数据量无压力,完全符合面试性能要求。
3. 贪心思想的通用性
这种「拆分问题、局部最优推全局最优」的思路,不仅适用于股票问题,在区间求和、利润最大化、任务调度类算法中都能通用,是进阶算法思维的核心。
4. 利润初始值必须为0
题目要求无获利返回0,初始值不能设为负数,下跌行情自动返回0,逻辑闭环无漏洞。
五、算法学习总结
这道题是贪心算法进阶的标志性题目,核心是打破单次交易的思维定式,理解「拆分上涨区间、逐段获利」的本质。
从121题(单次买卖)到122题(多次买卖),思维从「找一对最值」升级为「累加所有正收益」,吃透这道题,股票系列所有基础题就能全部通关,后续带冷冻期、带手续费的进阶股票题,都是在此基础上扩展。
更多推荐
所有评论(0)