
剑指 Offer 63. 股票的最大利润——动态规划
发布日期:2021-05-07 21:20:11
浏览次数:16
分类:精选文章
本文共 1049 字,大约阅读时间需要 3 分钟。
要解决这个问题,我们需要找到一种高效的方法来计算买卖股票一次能获得的最大利润。直接暴力法虽然能解决问题,但时间复杂度太高,因此我们需要一种更优化的算法。
优化思路
我们可以通过以下步骤来优化问题:
初始化变量:我们需要两个变量,一个记录当前的最低价格 min
,另一个记录最大利润 maxProfit
。初始时,min
可以设为数组的第一个元素,maxProfit
初始设为0。
遍历数组:从数组的第二个元素开始遍历。对于每个元素:
- 如果当前元素的价格低于
min
,更新min
。 - 否则,计算当前元素价格与
min
的差值(即利润),并与maxProfit
比较,更新maxProfit
。
处理边界情况:如果数组只有一个元素或者所有元素都是递减的,利润为0,这种情况会自动处理。
这种方法的时间复杂度是 O(n),其中 n 是数组的长度,效率非常高。
代码实现
以下是基于上述思路的代码实现:
public class Solution { public int maxProfit(int prices[]) { if (prices.length == 0) { return 0; } int min = prices[0]; int maxProfit = 0; for (int i = 1; i < prices.length; i++) { if (prices[i] < min) { min = prices[i]; } else if (prices[i] - min > maxProfit) { maxProfit = prices[i] - min; } } return maxProfit; }}
解释
- 初始化变量:
min
初始化为数组的第一个元素,maxProfit
初始化为0。 - 遍历数组:从第二个元素开始,逐个检查每个元素是否低于当前的
min
,如果是,则更新min
。如果不是,计算当前元素与min
的差值,并与maxProfit
比较,更新较大的那个值。 - 返回结果:遍历结束后,
maxProfit
就是最大利润。
这种方法确保我们只遍历了一次数组,时间复杂度为 O(n),非常高效,适用于大数组。
发表评论
最新留言
很好
[***.229.124.182]2025年03月28日 15时30分01秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【单片机开发】智能小车工程(经验总结)
2019-03-05
【单片机开发】基于stm32的掌上游戏机设计 (项目规划)
2019-03-05
C++&&STL
2019-03-05
微信js-sdk使用简述(分享,扫码功能等)
2019-03-05
c++中ifstream及ofstream超详细说明
2019-03-05
web项目配置
2019-03-05
基于单片机简易信号误差分析设计-全套资料
2019-03-05
基于单片机简易脉搏测量仪系统设计-毕设课设资料
2019-03-05
Javascript中String支持使用正则表达式的四种方法
2019-03-05
Servlet2.5的增删改查功能分析与实现------删除功能(四)
2019-03-05
spring启动错误:Could not resolve placeholder
2019-03-05
invalid byte sequence for encoding
2019-03-05
技术美术面试问题整理
2019-03-05
ORB-SLAM2:LoopClosing线程学习随笔【李哈哈:看看总有收获篇】
2019-03-05
js求阶乘
2019-03-05
Nginx---惊群
2019-03-05
项目中常用的审计类型概述
2019-03-05
(九)实现页面底部购物车的样式
2019-03-05