算法随想录第四十九天打卡|121. 买卖股票的最佳时机 , 122.买卖股票的最佳时机II

详细布置 

股票问题是一个动态规划的系列问题,今日安排的题目不多,大家可以慢慢消化。

121. 买卖股票的最佳时机 

视频讲解:动态规划之 LeetCode:121.买卖股票的最佳时机1_哔哩哔哩_bilibili

代码随想录

思路

确定买入的时候,为遍历之前的最小值。确定差值进行比较。

class Solution(object):
    def maxProfit(self, prices):
        if len(prices)==1:
            return 0
        if len(prices)==2:
            return prices[1]-prices[0] if prices[1]>prices[0] else 0
        dp=[0]*len(prices)  #表示0到i天所能得到的最大利益
        dp[1]=prices[1]-prices[0] if prices[1]>prices[0] else 0
        min_num=min(prices[0],prices[1])  #买入的日期
        dif=dp[1]  #指的是差值也是最后的返回值
        for i in range(2,len(prices)):
            min_num=min(min_num,prices[i-1])
            if dif0 else 0

总结

感觉代码量太长了,还有优化空间。我这个应该算是动态规划吧?感觉用贪心会更好一些,暴力应该也可以解出来。

122.买卖股票的最佳时机II  

视频讲解:动态规划,股票问题第二弹 | LeetCode:122.买卖股票的最佳时机II_哔哩哔哩_bilibili

代码随想录

class Solution(object):
    def maxProfit(self, prices):
        #表示0到i手上的最大利润且分现在手上有票和手上没有票两种状态
        dp=[[0]*2 for _ in range(len(prices))]
        dp[0][0]=0  #代表手上没有票
        dp[0][1]=-prices[0]
        for i in range(1,len(prices)):
            dp[i][0]=max(dp[i-1][0],dp[i-1][1]+prices[i])
            dp[i][1]=max(dp[i-1][1],dp[i-1][0]-prices[i])
        return dp[-1][0]

总结

这道题没有写出来,他是道新题,考虑了买时的状态,之前有一维数组用x,y坐标来做dp数组1的,是 474.一和零,而这道题还加入了买与不买的状态,可以说是两个dp数组了。原来是用这种方式解决的吗。

你可能感兴趣的:(算法)