【Golang】LeetCode面试经典150题:121. 买卖股票的最佳时机

题干:

给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格。

你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。

返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0 。

解法:

func max(a, b int) int {
    if a > b {
        return a
    }
    return b
}

func min(a, b int) int {
    if a < b {
        return a
    }
    return b
}

func maxProfit(prices []int) (ans int) {
    mn := 10001
   // 不断获取最小的值,计算当前值-最小值所能获得的利润
    for _, p := range prices {
        ans = max(ans, p - mn)
        mn = min(mn, p)
    }
    return
}

具体示例:

给定的测试用例是 `[7, 1, 5, 3, 6, 4]`,我们将使用这个数组来分析每轮循环的变化。

初始时,最小价格 `mn` 被设置为一个较大的值(10001),最大利润 `ans` 为 0。

第一轮循环:

- 当前价格为 7,7 大于最小价格 `mn`(10001),所以更新最大利润 `ans` 为 7 - 10001 = -9994。

- 更新最小价格 `mn` 为 7。

第二轮循环:

- 当前价格为 1,1 小于最小价格 `mn`(7),所以更新最小价格 `mn` 为 1。

第三轮循环:

- 当前价格为 5,5 大于最小价格 `mn`(1),所以更新最大利润 `ans` 为 5 - 1 = 4。

第四轮循环:

- 当前价格为 3,3 小于最小价格 `mn`(5),所以更新最小价格 `mn` 为 3。

第五轮循环:

- 当前价格为 6,6 大于最小价格 `mn`(3),所以更新最大利润 `ans` 为 6 - 3 = 3。

第六轮循环:

- 当前价格为 4,4 小于最小价格 `mn`(6),所以更新最小价格 `mn` 为 4。

最终,最大利润 `ans` 的值为 4,表示在给定的价格数组中,可以获得的最大利润为 4。

通过分析每轮循环的变化,我们可以看到在遍历价格数组的过程中,不断更新最小价格和最大利润,从而得到最大的利润值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值