题解 | #买卖股票的最好时机#

买卖股票的最好时机

http://www.nowcoder.com/practice/64b4262d4e6d4f6181cd45446a5821ec

python版动态规划题解,更改k适用于任意交易次数

class Solution:
    def maxProfit(self,prices):
        #适用于任意交易次数,只用于本题可以将k维去掉
        len_i=len(prices)  #能交易的总天数
        k=1  #允许交易的最大次数
        len_k=k+1  #如果交易一次,k应该有0和1两个值!!!!!!!!
        dp=[[[0]*2 for _ in range(len_k)] for _ in range(len_i)] #dp[交易的第几天][最多交易k次][手里持有或没有持有股票]
        #base case
        #dp[-1][k][0]=0  还没开始交易的最大利润是0
        #dp[-1][k][1]=-float('inf')  还没开始交易手里不可能出现股票
        #dp[i][0][0]=0  不允许交易的话最大利润肯定是0
        #dp[i][0][1]=-float('inf')  不允许交易手中不可能有股票
        #处理basecase
        # i=0的情况
        for k in range(len_k):
            dp[0][k][0]=0
            dp[0][k][1]=-prices[0]
        #k=0的情况
        for i in range(len_i):
            dp[i][0][0]=0
            dp[i][0][1]=-prices[i]

        for i in range(1,len(dp)):
            for k in range(1,len(dp[0])):
                #第i天手里没有股票的最大利润=max(昨天我就没有,昨天我有我卖了)
                dp[i][k][0]=max(dp[i-1][k][0],dp[i-1][k][1]+prices[i])
                #第i天手里有股票的最大利润=max(昨天我就有,昨天我没有但是我今天买了)
                dp[i][k][1]=max(dp[i-1][k][1],dp[i-1][k-1][0]-prices[i])
        print(dp)
        return dp[-1][-1][0]
全部评论

相关推荐

10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
11-09 14:54
已编辑
华南农业大学 产品经理
大拿老师:这个简历,连手机号码和照片都没打码,那为什么关键要素求职职位就不写呢? 从上往下看,都没看出自己到底是产品经理的简历,还是电子硬件的简历? 这是一个大问题,当然,更大的问题是实习经历的描述是不对的 不要只是去写实习流程,陈平,怎么去开会?怎么去讨论? 面试问的是你的产品功能点,是怎么设计的?也就是要写项目的亮点,有什么功能?这个功能有什么难处?怎么去解决的? 实习流程大家都一样,没什么优势,也没有提问点,没有提问,你就不得分 另外,你要明确你投的是什么职位,如果投的是产品职位,你的项目经历写的全都是跟产品无关的,那你的简历就没用 你的面试官必然是一个资深的产品经理,他不会去问那些计算机类的编程项目 所以这种四不像的简历,在校招是大忌
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务