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

2025年- H75-Lc183--121.买卖股票的最佳时机1(贪心or动态规划)--Java版

1.题目描述

在这里插入图片描述

2.思路

(1)贪心
局部最优的思想,每次收获每天的正利润。
全局最优:由局部最优得到。
索引要从1开始(因为第0天是买,第1天是卖)
result=max(price[i]-price[i-1],0)
在这里插入图片描述
前两天利润是负数,所以直接取0
在这里插入图片描述

(2)动态规划
1)dp[i][0]:持有股票的最大现金(可能在i的前几天买了这个股票,第i天只是拥有持有股票的状态)
dp[i][1]:不持有股票的最大现金的状态(可能是在第i天卖出,也可能是前几天卖出,只是维持这个不持有股票的状态)
最终结果在这两个数组中取一个最大值:dp[n-1][0],dp[n-1][1]取一个最大值。
2)dp[i-1][0]:在第i-1天还是持有股票的状态。-price[i]:或者再第i天才买入股票。求二者之间的最大值dp[i][0]=max(dp[i-1][0],-price[i])
如果再第i天就把股票卖了,所以再i-1天股票是保存有的状态,dp[i][1]=dp[i-1][0]+prices[i]. 所以可以得到递推公式dp[i][1]=max(dp[i-1][1],dp[i-1][0]+price[i])
3)dp数组初始化。
dp[0][0]=0-price[0]
dp[0][1]=0;
4)遍历顺序:从前往后的顺序(后面的状态依赖于前面的状态)
for(i=1;i<len;i++) 因为i=0已经在第三步初始化了。
5)输出max(dp[n-1][0],dp[n-1][1])
不持有股票的手上现金会多
最后打印一下dp数组

3.代码实现

public class H121 {public int maxProfit(int[] prices) {int  result=0;int minPrice = Integer.MAX_VALUE;for(int i=0;i<prices.length;i++){if(prices[i]<minPrice){minPrice=prices[i];}else {result =  Math.max(prices[i] - minPrice, result);}}return result;}public static void main(String[] args){H121 test=new H121();int[] price={7,1,5,3,6,4};int res=test.maxProfit(price);System.out.print(res);}}
http://www.xdnf.cn/news/914905.html

相关文章:

  • Vue:Ajax
  • 学习STC51单片机30(芯片为STC89C52RCRC)
  • 【leetcode】递归,回溯思想 + 巧妙解法-解决“N皇后”,以及“解数独”题目
  • c++学习-this指针
  • 微信小程序带参分享、链接功能
  • ​​Android 如何查看CPU架构?2025年主流架构有哪些?​
  • 文字转语音
  • 安卓基础(Java 和 Gradle 版本)
  • Qt Quick Test模块功能及架构
  • Qt/C++学习系列之列表使用记录
  • 网络原理5 - TCP4
  • 【HarmonyOS Next之旅】DevEco Studio使用指南(三十一) -> 同步云端代码至DevEco Studio工程
  • 【Java学习笔记】StringBuilder类(重点)
  • 基于 Transformer robert的情感分类任务实践总结之二——R-Drop
  • Python实例题:Python计算线性代数
  • SQL 基础入门
  • Vue学习之---nextTick
  • 抖去推--短视频矩阵系统源码开发
  • vue3 + vite实现动态路由,并进行vuex持久化设计
  • Vue ④-组件通信 || 进阶语法
  • 基于SFC的windows系统损坏修复程序
  • 个人电脑部署本地大模型+UI
  • SQL Server全局搜索:在整个数据库中查找特定值的高效方法
  • 11.RV1126-ROCKX项目 API和人脸检测画框
  • SCAU数值计算OJ
  • ​​Java 异常处理​​ 的详细说明及示例,涵盖 try-catch-finally、自定义异常、throws 与 throw 的核心概念和使用场景
  • 深入Java8-日期时间API:TemporalAdjusters、TemporalAdjuster类
  • C++中的右值引用与移动语义的理解
  • 思维链的 内部机制和简单理解
  • 【Unity Shader编程】之让画面动起来