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; int sell1 = 0; int buy2 = Integer.MAX_VALUE; int sell2 = 0; int buy3 = Integer.MAX_VALUE; int sell3 = 0; for (int price : prices) { // 第一次买入的最低价格 buy1 = Math.min(buy1, price); // 第一次卖出后的最大利润 sell1 = Math.max(sell1, price - buy1); // 第二次买入的最低价格,考虑第一次卖出后的利润 buy2 = Math.min(buy2, price - sell1); // 第二次卖出后的最大利润,考虑第二次买入后的利润 sell2 = Math.max(sell2, price - buy2); // 第三次买入的最低价格,考虑第二次卖出后的利润 buy3 = Math.min(buy3, price - sell2); // 第三次卖出后的最大利润,考虑第三次买入后的利润 sell3 = Math.max(sell3, price - buy3); } return sell3; } }
编程语言是Java。
该题考察的知识点是买卖股票的最佳时机,动态规划。
代码的文字解释如下:maxProfit方法用于计算买卖股票的最大利润,初始化了6个变量:buy1、sell1、buy2、sell2、buy3、sell3,用来记录三次买入和卖出的价格和利润。
通过一次遍历股票价格数组prices,更新这六个变量的值。buy1记录第一次买入的最低价格,sell1记录第一次买入后的最大利润;buy2记录第二次买入的最低价格,sell2记录第二次买入后的最大利润;buy3记录第三次买入的最低价格,sell3记录第三次买入后的最大利润。
在每次遍历时,更新buy1、sell1、buy2、sell2、buy3、sell3的值,确保它们分别记录每次买入和卖出的最佳价格和利润。返回sell3,即第三次卖出后的最大利润。