codility MaxProfit

本文介绍了一种用于计算股票买卖最大利润的高效算法。通过分析价格波动,该算法能够确定最佳买卖时机,实现利润最大化。
部署运行你感兴趣的模型镜像

Question:codility Lesson9 MaxProfit

My Answer:

def solution(A):
    maxprofit = 0
    max_ending = 0
    for i in range(1,len(A)):
        max_ending = max(0,max_ending + A[i] - A[i - 1])
        maxprofit = max(max_ending,maxprofit)
    return maxprofit

您可能感兴趣的与本文相关的镜像

Llama Factory

Llama Factory

模型微调
LLama-Factory

LLaMA Factory 是一个简单易用且高效的大型语言模型(Large Language Model)训练与微调平台。通过 LLaMA Factory,可以在无需编写任何代码的前提下,在本地完成上百种预训练模型的微调

# 普通文本型问题回答 我们来一步一步、用最基础的方式讲解 `maxProfit` 函数和里面的循环部分。假设你现在刚学完 C++ 的函数和数组,我用生活化的例子带你理解。 --- ## 🎯 我们的目标是什么? 你有一只股票,连续 7 天的价格你知道,比如: ``` 第0天: 10元 第1天: 7元 第2天: 5元 第3天: 8元 第4天: 12元 第5天: 9元 第6天: 11元 ``` 你只能 **买一次、卖一次**,而且必须 **先买后卖**。 问:怎么赚最多钱? 👉 显然,你在**最低价买入**,**最高价卖出**(但卖出要在买入之后)就能赚最多。 比如上面的例子: - 你在第2天 **花5元买入** - 在第4天 **以12元卖出** - 赚了 $12 - 5 = 7$ 元 → 这就是最大利润! --- ## 💡 怎么让电脑算出来? 因为我们只有 7 天,数据很小,可以用“笨办法”:**把所有可能的买卖方式都试一遍**! 这就是 `maxProfit` 函数做的事。 --- ## 🔍 maxProfit 函数详解 ```cpp int maxProfit(int prices[]) { int max_profit = 0; // 记录最大的利润,一开始设为0(不买不卖就不亏不赚) for (int i = 0; i < 7; i++) { // i 是“买入”的那一天 for (int j = i + 1; j < 7; j++) { // j 是“卖出”的那一天,必须在 i 之后 int profit = prices[j] - prices[i]; // 当前这次买卖能赚多少钱? if (profit > max_profit) { max_profit = profit; // 如果更赚钱,就更新最大利润 } } } return max_profit; // 返回能找到的最大利润 } ``` --- ## 🧠 循环是怎么运行的?举个例子 还是这组数据: ```cpp prices[7] = {10, 7, 5, 8, 12, 9, 11}; ``` 我们来看看外层循环和内层循环怎么走: ### 第一轮:i = 0(第0天买入,价格10元) - j = 1:卖第1天,赚 $7 - 10 = -3$(亏了,不算最大) - j = 2:$5 - 10 = -5$ - j = 3:$8 - 10 = -2$ - ... - 所有都亏钱 → max_profit 还是 0 ### 第二轮:i = 1(第1天买入,7元) - j = 2:$5 - 7 = -2$ - j = 3:$8 - 7 = 1$ → 赚1元!max_profit = 1 - j = 4:$12 - 7 = 5$ → 赚5元!max_profit = 5 - ... ### 第三轮:i = 2(第2天买入,5元)← 最佳买入点! - j = 3:$8 - 5 = 3$ - j = 4:$12 - 5 = 7$ → 赚7元!max_profit 更新为 7 ✅ - j = 5:$9 - 5 = 4$ - j = 6:$11 - 5 = 6$ 后面无论怎么买,都不可能比“5元买,12元卖”更赚了。 所以最终 `maxProfit` 返回 7。 --- ## 📌 关键点总结 | 代码 | 含义 | |------|------| | `for (int i = 0; i < 7; i++)` | 尝试在第 i 天买入 | | `for (int j = i + 1; j < 7; j++)` | 尝试在第 j 天卖出(j 必须大于 i,因为不能先卖后买) | | `prices[j] - prices[i]` | 这次买卖赚的钱 | | `if (profit > max_profit)` | 如果这次更赚,就记下来 | --- ## 🤔 为什么 max_profit 初始是 0? 因为如果你发现所有买卖都会亏钱(比如股价一直跌),那你干脆 **不交易**,利润就是 0。 所以最大利润至少是 0(不会取负数)。 --- ## ✅ 总结一句话 `maxProfit` 函数就是让计算机像人一样,**把所有可能的买卖组合都试一遍**,记住哪一次最赚钱,最后告诉你答案。 虽然“笨”,但简单、可靠、容易理解,非常适合初学者! --- 如果你想,我可以画个表格展示 `i` 和 `j` 的所有组合,帮你彻底看清执行过程。需要吗?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值