描述
在一片广阔的草原上,牧人将牛群视为贵重财产。在一定时间段内,他记录了每天牛群的价格,用列表 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;
}
}