Leetcode 123.买卖股票的最佳时期3(内有随心谈,718)

0 阅读3分钟

题目

image.png

26年7月18日(首刷看解)

func maxProfit(prices []int) int {
    //dp[n][j]表示在第n天,持有状态为j的情况相爱,可以获取的最大利润
    //关键是这个两次要怎么实现?计数器?在哪里计数呢? 
   dp:=make([][]int,len(prices)+1)
   for i,_ := range dp{
    dp[i]=make([]int,4)
   }
   dp[0][0]=-prices[0] //第一次持有
   dp[0][1]=0   //第一次没持有
   dp[0][2]=-prices[0]  //第二次持有
    dp[0][3]=0    //第二次没持有 
   for i:=1;i<=len(prices);i++{
        dp[i][0]=max(-prices[i-1],dp[i-1][0])
        dp[i][1]=max(dp[i-1][0]+prices[i-1],dp[i-1][1])
        dp[i][2]=max(dp[i-1][1]-prices[i-1],dp[i-1][2])
        dp[i][3]=max(dp[i-1][2]+prices[i-1],dp[i-1][3])
   }
   return max(dp[len(prices)][1],dp[len(prices)][3])
}

思路

只能买两次,一开始我的思考就是这个两次要怎么实现?计数器?在哪里计数呢?,之前要么是只买一次,要么是可以一直买卖,**这一次给具体的次数 *尝试解答无果,后看题解后独立自解

它的核心思路,就是看固定两次,其实总状态只有固定那么几种,就是第一次持有,第一次没持有(第一次持有后卖出),第二次持有,第二次每持有,这里是偶数次代表持有,奇数次代表每持有

四种状态对应四种递推公式,其实是两种

然后注意最后还是没持有的状态下钱最多

然后初始化,这里第二次持有,就会想初始化为多少才是对的,这里建议列一两个数字,来模拟递推,看看到底初始化多少才是对的。

随心谈

最近,我也是看了关于卢本伟时隔10年的采访视频,没错就是那个卢本伟,讲述了一些卢本伟一个主播当时的一个内心想法,和在被禁播后的一个生活重新开始的变化,谈到了一个关于就是游戏行业做一款游戏,主持人会问他,有没有一些比如就是现在的市场游戏很难做出来的一些现实层面的考量,卢本伟说没有,就是想做这件事

从一个内心的想法出发,我觉得或许这也是我要追求的,无论以后我是在做app,做视频,做游戏,甚至各种和互联网相关的都行,我总能发现其中的乐趣,不要太被外在环境束缚,有时候世俗赚钱,没有想象中的那么重要,不要以在赚钱为目的,而是把钱当做你一个追寻梦想,追寻想做的事情上的一个附带奖励,我觉得这才是我的追求,因此我必须否定我之前的焦虑关于能不能找到工作的状态了,其实本身的喜欢才是最重要的,其他的东西尽量的不要把优先级拉满,否则真的会失去本心,找不到方向的。我觉得太想赚钱,比赚不到钱但是没失去纯粹更严重,也更不应该。无论何时,如果做着自己不喜欢的事,不能做自己喜欢的事才是最痛苦的,不要忽视更为重要的东西