当前位置: 首页 > news >正文

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

题意理解: 

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

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

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

        

        这道题的特别之处是,最多可以买卖k次,k是一个可以变化的值,所以使用j对k的数值进行遍历。

解题思路:

        (1)定义dp二维[][]数组

                dp[0][0]表示不操作

                dp[i][j=2(k-1)+1]表示第k次买入

                dp[i][j=2(k-1)+2]表示第k次卖出

          (2) 初始化

                dp[0][0]=0

                dp[0][j=2(k-1)+1]=-prices[i]

                dp[0][j=2(k-1)+2]=0

          (3) 递推公式

                dp[i][j=2(k-1)+1]

                =max(延续之前状态,买入)

                =max(dp[i-][j=2(k-1)+1],dp[i-1][j=2(k-1)]-prices[i])

                dp[i][j=2(k-1)+2]=-prices[i]

                =max(延续之前状态,卖出)

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

1.解题

public int maxProfit(int k, int[] prices) {int[][] dp=new int[prices.length][2*k+1];for(int i=0;i<=2*k;i++){if(i%2==0)dp[0][i]=0;else dp[0][i]=-1*prices[0];}for(int i=1;i<prices.length;i++){dp[i][0]=dp[i-1][0];for(int j=0;j<2*k;j+=2){dp[i][j+1]=Math.max(dp[i-1][j+1],dp[i-1][j]-prices[i]);dp[i][j+2]=Math.max(dp[i-1][j+2],dp[i-1][j+1]+prices[i]);}}int max=0;for(int i=0;i<=2*k;i++)max=Math.max(max,dp[prices.length-1][i]);return max;}

2.分析

时间复杂度:O(kn)

空间复杂度:O(2kn)

http://www.lryc.cn/news/297865.html

相关文章:

  • win32编程系统BUG(Win32 API中的WM_SETTEXT消息)
  • Linux防火墙开放
  • 通过 docker-compose 部署 Flink
  • HarmonyOS ArkTS修改App的默认加载的界面(二十)
  • 【前端高频面试题--Vue基础篇】
  • Spring Boot 实现热插拔 AOP
  • 2月05日,每日信息差
  • 使用Python进行数据的描述性分析,用少量的描述性指标来概括大量的原始数据
  • 【JS逆向三】逆向某某网站的sign参数,并模拟生成仅供学习
  • 移动光猫gs3101超级密码及改桥接模式教程
  • leetcode 153
  • 【MySQL】数据库的基础——数据库的介绍、MySQL的介绍和架构、SQL分类、MySQL的基本使用、MySQL的存储引擎
  • 后端的技术设计文档
  • Windows10安装PCL1.14.0及点云配准
  • C语言第二十二弹---指针(六)
  • Qt Windows和Android使用MuPDF预览PDF文件
  • MongoDB聚合:$replaceWith
  • Vue 进阶系列丨实现简易VueRouter
  • unity editor 编辑器 GUID localID LocalFileId 查找问题
  • 【Mybatis】从0学习Mybatis(2)
  • ChatGPT高效提问—prompt常见用法(续篇九)
  • echarts的title标题属性
  • 【HTML+CSS】使用CSS中的Position与z-index轻松实现一个简单的自定义标题栏效果
  • 从零开始:用 Rust 编写你的第一个 Web 服务
  • 机器学习复习(8)——逻辑回归
  • 深入解析MySQL 8:事务数据字典的变革
  • jquery写表格,通过后端传值,并合并单元格
  • 百家cms代审
  • 算法学习——LeetCode力扣二叉树篇3
  • 强制卸载挂载目录