1. 题目
https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/
121. 买卖股票的最佳时机
2. 解法
2.1 解法一:动态规划
2.2 解法二:非动态规划
思路
这道题的目标是给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格,找出只进行一次交易(即买入和卖出一支股票)所能获得的最大利润。动态规划的思路是维护一个最小买入价格和一个最大利润,遍历数组,更新这两个变量,最后返回最大利润
代码的逻辑
代码的逻辑是这样的:
- 首先,判断数组的长度是否小于等于1,如果是,就直接返回0,因为没有交易的可能。
- 然后,初始化一个变量min,表示最小买入价格,初始值为数组的第一个元素。初始化一个变量ans,表示最大利润,初始值为0。
- 接着,从数组的第二个元素开始遍历,对于每个元素prices[i],做两件事:
- 用prices[i]减去min,得到当前卖出价格和最小买入价格的差值,即当前利润。如果这个利润大于ans,就更新ans为这个利润。
- 用min和prices[i]比较,如果prices[i]小于min,就更新min为prices[i],表示找到了更低的买入价格。
- 最后,遍历结束后,返回ans作为答案。
这样,我们就可以在一次遍历中找到最大利润。
具体实现
1 2 3 4 5 6 7 8 9 10 11 12 13 | public int maxProfit( int [] prices) { int length = prices.length; int min = prices[ 0 ]; int max = 0 ; for ( int i = 1 ; i < length; i++) { if (prices[i] > min) { max = Math.max(max, prices[i] - min); } else { min = prices[i]; } } return max; } |
3. 总结
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 上周热点回顾(2.24-3.2)