题解 | #牛群买卖计划# java
牛群买卖计划
https://www.nowcoder.com/practice/3e4ae511b4a941b788da5077b08a7d07
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param prices int整型一维数组 * @return int整型 */ public int maxProfit (int[] prices) { // write code here int buy1 = Integer.MAX_VALUE, buy2 = Integer.MAX_VALUE, buy3 = Integer.MAX_VALUE; int sell1 = 0, sell2 = 0, sell3 = 0; for (int i = 0; i < prices.length; i++) { buy1 = Math.min(buy1, prices[i]); sell1 = Math.max(sell1, prices[i] - buy1); buy2 = Math.min(buy2, prices[i] - sell1); sell2 = Math.max(sell2, prices[i] - buy2); buy3 = Math.min(buy3, prices[i] - sell2); sell3 = Math.max(sell3, prices[i] - buy3); } return sell3; } }
该代码使用的编程语言是 Java。
该题考察的知识点是动态规划和数组操作。
代码的详细文字解释如下:
- 首先,定义了六个变量
buy1
、buy2
、buy3
、sell1
、sell2
、sell3
,分别表示第一次购买、第二次购买、第三次购买、第一次卖出、第二次卖出、第三次卖出的最大收益。 - 初始时,将
buy1
、buy2
、buy3
分别设置为整型变量的最大值INT_MAX
,将sell1
、sell2
、sell3
设置为 0。 - 接下来进入循环,遍历给定的价格数组
prices
。 - 在每次循环中,更新
buy1
为当前价格和buy1
的较小值。 - 更新
sell1
为当前价格减去buy1
和当前sell1
的较大值,表示在第一次卖出时的最大收益。 - 更新
buy2
为当前价格减去第一次卖出的收益和buy2
的较小值,表示在第二次购买时的成本。 - 更新
sell2
为当前价格减去第二次购买时的成本和当前sell2
的较大值,表示在第二次卖出时的最大收益。 - 更新
buy3
为当前价格减去第二次卖出的收益和buy3
的较小值,表示在第三次购买时的成本。 - 更新
sell3
为当前价格减去第三次购买时的成本和当前sell3
的较大值,表示在第三次卖出时的最大收益。 - 循环结束后,返回
sell3
,表示获得的最大收益。