代码随想录算法训练营第五十天 | 123. 买卖股票的最佳时机 III,188. 买卖股票的最佳时机 IV

news/发布时间2024/4/29 5:11:06

123. 买卖股票的最佳时机 III

 
已解答
困难
 

相关标签

相关企业
 

给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 两笔 交易。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

 

示例 1:

输入:prices = [3,3,5,0,0,3,1,4]
输出:6
解释:在第 4 天(股票价格 = 0)的时候买入,在第 6 天(股票价格 = 3)的时候卖出,这笔交易所能获得利润 = 3-0 = 3 。随后,在第 7 天(股票价格 = 1)的时候买入,在第 8 天 (股票价格 = 4)的时候卖出,这笔交易所能获得利润 = 4-1 = 3 。

示例 2:

输入:prices = [1,2,3,4,5]
输出:4
解释:在第 1 天(股票价格 = 1)的时候买入,在第 5 天 (股票价格 = 5)的时候卖出, 这笔交易所能获得利润 = 5-1 = 4 。   注意你不能在第 1 天和第 2 天接连购买股票,之后再将它们卖出。   因为这样属于同时参与了多笔交易,你必须在再次购买前出售掉之前的股票。

示例 3:

输入:prices = [7,6,4,3,1] 
输出:0 
解释:在这个情况下, 没有交易完成, 所以最大利润为 0。

示例 4:

输入:prices = [1]
输出:0

 

提示:

  • 1 <= prices.length <= 105
  • 0 <= prices[i] <= 105

 


func maxProfit(prices []int) int {//明确dp数组含义, dp[i][0] 不操作  dp[i][1] 第一次持有, dp[i][2] 第一次空仓 , 
dp[i][3] 第二次持有, dp[i][4] 第二次空仓    //递推公式  dp[i][1] = max(dp[i-1][1],-price)//dp[i][2] = max(dp[i][2],dp[i-1]+price])//dp[i][3] = max(dp[i][3],dp[i-1][2]-price)//dp[i][4] = max(dp[i][4],dp[i-1][3]+price)    //初始化//dp[0][0] = 0   dp[0][1] = -price, dp[0][2] = 0  dp[0][3] = -price[0] dp[0][4] = 0//输出 dp[i][4]    dp := make([][5]int, len(prices))dp[0][1] = -prices[0]dp[0][3] = -prices[0]for i := 1; i < len(dp); i++ {dp[i][1] = max(dp[i-1][1], -prices[i])dp[i][2] = max(dp[i-1][2], dp[i-1][1]+prices[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 dp[len(prices)-1][4]
}
func max(a, b int) int {if a > b {return a}return b
}

188. 买卖股票的最佳时机 IV

 
已解答
困难
 

相关标签

相关企业
 

给你一个整数数组 prices 和一个整数 k ,其中 prices[i] 是某支给定的股票在第 i 天的价格。

设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。也就是说,你最多可以买 k 次,卖 k 次。

注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。

 

示例 1:

输入:k = 2, prices = [2,4,1]
输出:2
解释:在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔交易所能获得利润 = 4-2 = 2 。

示例 2:

输入:k = 2, prices = [3,2,6,5,0,3]
输出:7
解释:在第 2 天 (股票价格 = 2) 的时候买入,在第 3 天 (股票价格 = 6) 的时候卖出, 这笔交易所能获得利润 = 6-2 = 4 。随后,在第 5 天 (股票价格 = 0) 的时候买入,在第 6 天 (股票价格 = 3) 的时候卖出, 这笔交易所能获得利润 = 3-0 = 3 。

 

提示:

  • 1 <= k <= 100
  • 1 <= prices.length <= 1000
  • 0 <= prices[i] <= 1000

func maxProfit(k int, prices []int) int {//dp[i][0] 不操作, dp[i][1] 第一次持有, dp[i][2] 第一次空仓, dp[i][2*k-1] 第k次持有, dp[i][2*k] 第k次空仓//递推公式//dp[i][0] = 0//dp[i][1] = dp[i-1][1],dp[i-1][0]-price[0]//dp[i][2] = dp[i-1][2],dp[i-1][1]+price[0]//初始化//dp[i][0] = 0//左到右//输出dp := make([]int, 2*k+1)for i := 1; i < 2*k; i = i + 2 {dp[i] = -prices[0]}for i := 1; i < len(prices); i++ {for day := 2 * k; day > 0; day-- {if day%2 == 0 {dp[day] = max(dp[day], dp[day-1]+prices[i])} else {dp[day] = max(dp[day], dp[day-1]-prices[i])}}}return dp[2*k]
}func max(a, b int) int {if a > b {return a}return b
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/53643132.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

Docker 最常用的镜像命令和容器命令

目录一、帮助命令二、运行第一个容器:hello-world2.1 运行命令2.2 命令执行流程图三、镜像相关命令及其基本操作3.1 登录私有镜像仓库3.2 拉取镜像3.3 查看镜像基本信息3.3.1 docker images 命令查看镜像基本信息(一)、docker images命令常用选项 -a : 显示所有的镜像(包括…

又发现一款免费好用的 AI 写代码神器,好用到爆,GitHub Copilot 可以扔了。。

大家好 ,我是R哥。 近两年 AI 太火了,风靡全球,AI 编程工具也没有落下,比如微软的 GitHub Copilot,还有阿里的通义灵码,连 JetBrains 系列工具都逼出了自家的 AI 功能。 大家知道我是效率狂人,同样也是工具狂人,之前给大家分享了不少开发神器,其中也不乏国内的优秀选手…

轻松创建基于 GPT-4 的 AI 原生应用 - Dify

Dify 是一个易用的 LLMOps 平台,旨在让更多人可以创建可持续运营的原生 AI 应用。Dify 提供多种类型应用的可视化编排,应用可开箱即用,也能以后端即服务的 API 提供服务。LLMOps(Large Language Model Operations)是一个涵盖了大型语言模型(如 GPT 系列)开发、部署、维护…

汽车制造业供应商管理会面临哪些问题?要如何解决?

汽车行业的供应链是及其复杂的,并且呈全球化分布,企业在知识产权方面的优势很可能是阶段性的。企业需要持续保持领先,将面临巨大的挑战,尽快地将产品推向市场是保持领先的唯一途径。然而,如果没有正确的方式去实现安全性、流程化和标准化,企业的优势则有可能不复存在,比…

递归组件实现子向父传值

业务逻辑:通过自己调用自己的方式生成树,再点击子菜单时,需要将点击子菜单的菜单名传值给父组件(使用总线 bus) 新建bus.js文件import { ref } from vueclass Bus {constructor() {// 收集订阅信息,调度中心this.eventList = {}, // 事件列表,这项是必须的// 下面的都是自…

[转帖]JUC内置线程池

https://cloud.tencent.com/developer/article/2235750 ThreadPoolExecutor ThreadPoolExecutor是最基础的线程池类:12345678public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueu…