【刷题日记】121. 买卖股票的最佳时机

简介: 【刷题日记】121. 买卖股票的最佳时机

一、题目描述:

今天我们来做一个简单的买股票的题,看看会不会对实际生活有些启发

image.png

二、这道题考察了什么思想?你的思路是什么?

题目比较明确,就是给定我们一个数组 prices ,表示某只股票每天的价格,我们可以在任意一天买入或者卖出,但是不能在同一天既买入又买卖出,做题也得符合市场的基本情况嘛

本题 要求我们按照规则买入和卖出股票,我们能获得的最大利润是多少

分析

看了这个题,心想要是实际生活中,每一天的股票价格我都能明确知道的话,那么我的收入肯定就不仅仅只有劳动力了,直接运用这个题的原理,低买高卖不就得了吗

当然,实际的股市比这个复杂得多,但是咱们来分析这个题,如果是想获得最大的利润,可不就是得在时间顺势推移的情况,能够做到从最低点买入,然后从买入时间之后的最高点卖出,这就可以获得最大利润了

还有一点这里需要注意,如果我们买入的价格总是比卖出的价格高,那么按照题目要求,是返回 0 , 而不是返回亏损的钱

按照示例 1 ,我们可以来演示一波:

初始化的时候,我们暂且设定买入的股票价格最低为 MaxInt64,我们可以获得的最大利润为 0

原数组 7 1 5 3 6 4
minValue MaxInt64
maxValue 0

开始遍历 prices 数组

遍历到 7 minValue 7
maxValue 0
遍历到 1 minValue 1
maxValue 0
遍历到 5 minValue 1
maxValue 4
遍历到 3 minValue 1
maxValue 4
遍历到 6 minValue 1
maxValue 5
遍历到 4 minValue 1
maxValue 5

则示例的最大利润是5

就按照咱们这种方式,总是认为自己买入的股票就是最低点,然后不停的去计算最大值和更新股票最低点

三、编码

根据上述逻辑和分析,我们就可以翻译成如下代码

  • 按照如上思想,咱们翻译代码即可,此处需要注意,咱们初始化的时候 minValue 至少要大于 1e5 ,根据题意 prices[i] 的最大值是 1e5 ,这是为了减少咱们在极端情况出现错误

编码如下:

func maxProfit(prices []int) int {
    minValue := math.MaxInt64
    maxValue := 0
    for i := 0; i < len(prices); i++ {
        if prices[i] < minValue {
            minValue = prices[i]
        } else if prices[i]-minValue > maxValue {
            maxValue = prices[i] - minValue
        }
    }
    return maxValue
}

四、总结:

image.png

咱们这种解题方式,时间复杂度很明确是 O(n) ,我们只遍历了 1 次 prices 数组,另外空间复杂度是 O(1) ,我们未引入其他更多的空间消耗

原题地址:121. 买卖股票的最佳时机

欢迎点赞,关注,收藏

朋友们,你的支持和鼓励,是我坚持分享,提高质量的动力

image.png

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是阿兵云原生,欢迎点赞关注收藏,下次见~

相关文章
|
11月前
|
Cloud Native
【刷题日记】干就完了,122. 买卖股票的最佳时机 II
【刷题日记】干就完了,122. 买卖股票的最佳时机 II
|
20天前
|
算法
六六力扣刷题贪心算法之买卖股票的最佳时机含手续费
六六力扣刷题贪心算法之买卖股票的最佳时机含手续费
21 0
|
7月前
|
算法
代码随想录算法训练营第四十八天 | LeetCode 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II
代码随想录算法训练营第四十八天 | LeetCode 121. 买卖股票的最佳时机、122. 买卖股票的最佳时机 II
43 1
|
7月前
|
算法
代码随想录算法训练营第五十天 | LeetCode 309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费、股票系列总结
代码随想录算法训练营第五十天 | LeetCode 309. 买卖股票的最佳时机含冷冻期、714. 买卖股票的最佳时机含手续费、股票系列总结
54 1
|
10月前
|
算法
LeetCode150道面试经典题-买卖股票的最佳时机(简单)
数组 prices[]表示一个股市一段时间的价格,prices[i] 表示股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。
50 0
|
11月前
|
算法 Cloud Native
【刷题日记】123. 买卖股票的最佳时机 III
【刷题日记】123. 买卖股票的最佳时机 III
|
存储 算法 Python
每日算法系列【LeetCode 123】买卖股票的最佳时机 III
每日算法系列【LeetCode 123】买卖股票的最佳时机 III
|
算法 Python
每日算法系列【LeetCode 121】买卖股票的最佳时机
每日算法系列【LeetCode 121】买卖股票的最佳时机
|
算法 Python
每日算法系列【LeetCode 122】买卖股票的最佳时机 II
每日算法系列【LeetCode 122】买卖股票的最佳时机 II
|
算法 Python
每日算法系列【LeetCode 714】买卖股票的最佳时机含手续费
每日算法系列【LeetCode 714】买卖股票的最佳时机含手续费