买卖股票的最佳时机

买卖股票的最佳时机一

  • 问题:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票一次),设计一个算法来计算你所能获取的最大利润。

  • 解决:

    #一次遍历
    class Solution:
        def maxProfit(self , prices ):
            # write code here
            minprice = float("inf")
            maxprofit = 0
            for price in prices:
                minprice = min(price, minprice)
                maxprofit = max(price - minprice, maxprofit)
            return maxprofit
    #时间复杂度O(n)
    #空间复杂度O(1)
    #动态规划
    class Solution:
        def maxProfit(self , prices ):
            # write code here
            n = len(prices)
            if n==0: return 0
            dp = [0] * n
            minprice = prices[0]
            for i in range(1,n):
                minprice = min(prices[i], minprice)
                dp[i] = max(dp[i-1],prices[i]-minprice)
            return dp[-1]
    #时间复杂度O(n)
    #空间复杂度O(n)
    

买卖股票的最佳时机二

  • 问题:给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。

  • 解决:

    #贪心算法
    class Solution(object):
        def maxProfit(self, prices):
            """
            :type prices: List[int]
            :rtype: int
            """
            if len(prices)<=1:return 0
            profit = 0
            for i in range(1,len(prices)):
                temp = prices[i] - prices[i-1]
                if temp > 0: profit += temp
            return profit
    #时间复杂度O(n)
    #空间复杂度O(1)
    
posted @ 2020-09-05 11:37  guguda  阅读(125)  评论(0)    收藏  举报