力扣刷题 122. 买卖股票的最佳时机 II

买卖股票的最佳时机 II

题目

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。
设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。
注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。
*示例 1:
输入: [7,1,5,3,6,4]
输出: 7

*示例 2:
输入: [1,2,3,4,5]
输出: 4
*
*示例 3:
输入: [7,6,4,3,1]

自己的解题思路

自己的思路首先对给定的列表进行遍历,举例如[7,1,5,3,6,4],若当前i对应的价格小于i+1的价格,则意味着低点买入,设置标记b为True,若当前i对应的价格大于i+1的价格,则意味着高点卖出,设置标记b为False。b代表是否买股票。
对应的代码如下:

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        max_value = 0#代表最大利润
        buy = 0#代表买入的索引位置
        sell = 0#代表卖出的索引位置
        b =False#代表是否买入股票
        i = 0
        #遍历列表
        while i<len(prices):
        	#考虑两种情况,当i是否为列表最后一位时
            if i != len(prices)-1
            	#判断是否买入了,如果没有买入,则在低点买入
                if prices[i]<prices[i+1] and not b:
                    buy = i
                    b = True            
                #判断是否卖出了,如果没有卖出,则在高点卖出
                elif prices[i]>prices[i+1]  and b:
                    sell = i
                    if prices[sell]-prices[buy]>0:
                    #利润的计算
                        max_value = max_value + prices[sell]-prices[buy]
                       	#已经卖出,将b置为False,买入和卖出的索引置为0
                        b = False
                        buy = 0
                        sell = 0
                i+=1
            else:
            	#当i为最后一位时,判断是否买入,若没买入,则i+1跳出循环,若买入则进行卖出
                if b:
                    sell = len(prices)-1
                    max_value = max_value + prices[sell]-prices[buy]
                i+=1
        return max_value

我的代码考虑了很多种情况,显得特别臃肿,没有将各种情况进行合并。下面参照大佬的代码,感觉自己还需要多加努力。

大佬的解题思路

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        profit = 0
        for i in range(1, len(prices)):
            tmp = prices[i] - prices[i - 1]
            if tmp > 0: profit += tmp
        return profit

作者:jyd
链接:https://leetcode-cn.com/problems/best-time-to-buy-and-sell-stock-ii/solution/best-time-to-buy-and-sell-stock-ii-zhuan-hua-fa-ji/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

大佬的代码化繁为简,只考虑今天和明天的差价,如果差价大于0则加入最大利润,如果差价小于0则不纳入计算。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值