题解 | #牛群买卖策略优化#

73 阅读1分钟

描述

在一片广阔的草原上,牧人将牛群视为贵重财产。在一定时间段内,他记录了每天牛群的价格,用列表 prices 表示。其中,prices[i] 表示第 i 天牛群的价格。每天,牧人可以与其他牧人进行一次交易,交易意味着他可以出售目前拥有的一头牛,或者购买一头牛替换为他目前拥有的那头牛。

每个牧人在同一天可以进行多次交易,但在每次交易之前,必须先完成前一次交易。即在购买另一头牛之前,需要先出售当前拥有的牛。 请编写一个函数来计算牧人经过一系列交易后能获得的最大利润,最初这个牧人没有牛。

示例1

输入:[1, 2, 3, 4, 5]
返回值:4

备注:

1 <= prices.length <= 10^5
0 <= prices[i] <= 10^4

知识点

贪心算法

解题思路

定义一个变量 maxProfit 来表示当前的最大利润,初始值为0。然后,我们遍历 prices 列表,从第二天开始,将每天的价格与前一天的价格进行比较:

  • 如果当前价格大于前一天的价格,说明牛群的价格上涨,我们可以将这头牛出售,获得利润为当前价格减去前一天的价格,然后将利润累加到 maxProfit 上。
  • 如果当前价格等于或小于前一天的价格,说明牛群的价格下跌或者持平,我们不进行交易。

最后返回maxProfit就是最终利润。

Java题解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param prices int整型一维数组
     * @return int整型
     */
    public int max_profitv2 (int[] prices) {
        // write code here
        int maxProfit = 0;
        for (int i = 1; i < prices.length; i++) {
            if (prices[i] > prices[i - 1]) {
                maxProfit += prices[i] - prices[i - 1];
            }
        }
        return maxProfit;
    }
}