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

买卖股票的最好时机

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]
全部评论

相关推荐

机械打工仔:不管啥专业,找工作改简历的第一课先把你那排版改了,简历上不要写个人简历四个字,找你要简历的谁不知道这个是简历?而且还占那么多空间,直接把自己名字和基础信息写上面,整体字体大一些。 还有这种经典两页简历一页大空白,导出PDF的时候多了一页几乎全是白的你自己看着不难受吗随手的事为啥不能改掉呢,这是态度问题,你试想一下你是HR你打开简历看到格式都没调整过会是什么感受?你自己都不重视你的简历,HR更不会在意。 然后内容你那个做两年咖啡就别往里写了,简历在精不在多,你在往你的简历里打字的时候就要想好这东西对你要找的工作有没有帮助。自我评价写一行就行了,不如给专业技能单开一栏。核心课程均分90这个真别写了,把你上过的有用的专业课列出来也行。有很多地方废话很多的精炼一下,比如你校内项目第一个写的那些,全然没有重点。 好好修改一下,我看你内容也挺优秀的,别被一个随便做的简历耽误了,我一个同专业的打工人看了都揪心更别说一天看几百份简历的HR
听劝,我这个简历该怎么改...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务