代码随想录补打卡 121买卖股票的最佳时机 122 买卖股票的最佳时机 二123买卖股票的最佳时机 三

news/2024/11/8 20:37:38/

代码如下

func maxProfit(prices []int) int { //建立一个二维数组 dp[i][0]表示持有股票的最大金钱 dp[i][1] 表示不持有股票的最大金钱 

        dp := make([][]int,len(prices))

        for i,_ := range dp {

            dp[i] = make([]int,2)

        }

        dp[0][0] = -prices[0]   // 第0天持有股票,则必须买入股票

        dp[0][1] = 0  //第0天不持有股票,则什么都不做,金额为0 

        for i := 1 ; i < len(prices) ; i++ {

            dp[i][0] = max(dp[i-1][0],-prices[i])      //如果在第i天持有股票,那么就有两种可能,一种是前一天持有股票,而今天什么都不做,那么他的金钱就是dp[i-1][0],或者是之前不持有,在第i天持有,那么金钱就是-prices[i] ,那么在这一天持有股票的最大值是两者的最大值

            dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i])  //如果在第i天不持有股票,同样有两种可能,一种是前一天就不持有股票,今天什么都没做,还有一种就是前一天是持有股票,今天把股票卖了出去

        }

        return max(dp[len(prices)-1][0],dp[len(prices)-1][1])

}

func max(a,b int) int {

    if a > b {

        return a 

    }else {

        return b 

    }

}

122   买卖股票的最佳时机二 

代码如下

func maxProfit(prices []int) int {

        dp := make([][]int,len(prices))

        for i,_ := range dp {

            dp[i] = make([]int,2)

        }

        dp[0][0] = -prices[0]

        dp[0][1] = 0 

        for i := 1 ; i < len(prices) ; i++ {

            dp[i][0] = max(dp[i-1][0],dp[i-1][1]-prices[i]) 和上面唯一区别是,如果在第i天想要买入股票,那么金额应该是前一天不持有股票的金额减去今天这支股票的金额 

            dp[i][1] = max(dp[i-1][1],dp[i-1][0]+prices[i])

        }

        return max(dp[len(prices)-1][0],dp[len(prices)-1][1])

}

func max(a,b int) int {

    if a > b {

        return a 

    }else {

        return b 

    }

}

123 买卖股票的最佳时机3 

代码如下

func maxProfit(prices []int) int {

      dp := make([][]int,len(prices)) 

      for i ,_ := range dp {

          dp[i] = make([]int,5)

      }

      dp[0][0] = 0         //第一种状态为不操作,可以是不操作,也可以是在同一天买了又卖,也相当于不操作

      dp[0][1] = -prices[0]  //第二种状态为第一次持有,即持有第一次的股票。可以是买入一次股票,也可以是买入一次后一直持有。

      dp[0][2] = 0   // 第三种状态为第一次不持有,即把第一次持有的股票卖出去

      dp[0][3] = -prices[0]  //第四种状态为第二次持有,即持有第二次买入的股票

      dp[0][4] = 0  //第五种状态为第二次不持有,即把第二次持有的股票卖出

      for i := 1 ; i < len(prices) ; i++ {

          dp[i][0] = dp[i-1][0]   //如果第i天不操作,那么该与i-1天的值相同

          dp[i][1] = max(dp[i-1][1],dp[i-1][0]-prices[i])  // 如果第i天不进行买入操作,那么其结果等于第i-1天,如果进行买入操作,则相当于前一天不操作,第i天买入这支股票

          dp[i][2] = max(dp[i-1][2],dp[i-1][1]+prices[i]) // 如果第i天不进行卖出操作,那么这个值就等于前一天的值,如果进行卖出操作就相当于前一天是持有的状态,在加上把这支股票卖出

          dp[i][3] = max(dp[i-1][3],dp[i-1][2]-prices[i]) //下面第二次持有的操作同第一次

          dp[i][4] = max(dp[i-1][4],dp[i-1][3]+prices[i])

      }

      return max(dp[len(prices)-1][2],dp[len(prices)-1][4])  //因为至多为2次,可能包含第二次怎么买都是亏得情况。所以比较卖出一次和两次的最大值 

}

func max(a,b int) int {

    if a > b {

        return a 

    }else {

        return b

    }

}


http://www.ppmy.cn/news/83215.html

相关文章

熟练掌握这5招,让Pandas DataFrame列随你调整

熟练运用Pandas进行数据处理和分析的你&#xff0c;是否遇到过DataFrame列顺序排列不顺的情况? 今天教你5种灵活方法&#xff0c;轻松调整Pandas DataFrame的列顺序&#xff0c;让数据处理更得心应手。 1. 使用loc索引器 可以传入一个列序列表给loc索引器来重新排列列顺序。例…

换个花样玩C++(14) 全方位认识C++的左值,右值,左值引用,右值引用,亡值

早期学习C语言的时候,认为可以被修改的左值是放在左边的,右边的则通常放置右值,后来转C++之后,随着C++不断地完善更新,发现有时候越来越捉摸不透C++了,右值已经与它最初的概念完全不一样了,越来越丰富。 这篇文章我尽可能用一些浅显易懂的文字和简要的代码示例来解释下左…

为何AI无法完全理解人类情感?GPT-4能否理解人类的情绪?

在科幻小说和电影里&#xff0c;我们经常看到超级AI人工智能机器人可以理解、感知甚至模拟人类的情感&#xff0c;但在现实世界中&#xff0c;我们距离这个目标还有一段相当长的距离&#xff0c;即使是强大的GPT-4甚至未来的GPT-5。过高夸大AI的体验和性能&#xff0c;往往并不…

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023)

Windows 11 22H2 中文版、英文版 (x64、ARM64) 下载 (updated May 2023) Windows 11, version 22H2 官方原版&#xff0c;2023 年 5 月 更新 请访问原文链接&#xff1a;https://sysin.org/blog/windows-11/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作…

android和flutter的混合项目切换系统语言时app重启启动问题

在 Android 项目中&#xff0c;使用 SharedPreferences 将当前设置的语言保存到本地。 在 Flutter 项目中&#xff0c;使用 flutter_localizations 库实现多语言支持。这个库支持自动检测当前系统的语言&#xff0c;并加载相应的翻译文件。 在 Android 的 Activity 中监听系统语…

设计模式 (四) 行为型设计模式系列

目录 1.职责链模式 2.命令模式 3.解释器模式 5.中介者模式 6.备忘录模式 7.观察者模式 8.状态模式 9.策略模式 10.模板方法模式 1.职责链模式 职责链模式将请求的发送者和接收者解耦&#xff0c;从而允许多个对象都有机会处理请求。这种模式通常用于处理请求的分发、…

吉时利 Keithley 2700数据采集器技术参数

概述&#xff1a; 每个 2700 系列系统均将精密测量、开关和控件集于一个紧凑集成的机箱中&#xff0c;适用于机架安装或台式应用。虽然所有三个系统的核心功能和编程是相同的&#xff0c;但各个主机都具有独特的功能。例如&#xff0c;2701 型具有 10/100BaseTX 以太网接口&am…

javascript中的Array对象 —— 数组的合并、转换、迭代、排序、堆栈

Array 是javascript中经常用到的数据类型。javascript 的数组其他语言中数组的最大的区别是其每个数组项都可以保存任何类型的数据。本文主要讨论javascript中数组的声明、转换、排序、合并、迭代等等基本操作。 创建数组和数组检测 1、使用Array构造函数 创建数组。 //创建…