题目:
假设有一个数组,它的第 i 个元素是一个给定的股票在第 i 天的价格。
设计一个算法来找到最大的利润。你可以完成尽可能多的交易(多次买卖股票)。然而,你不能同时参与多个交易(你必须在再次购买前出售股票)。
分析:
想要达到总体最优解,我们必须保证每个局部取到最优解。因为输入是数组,每个元素代表股票的当天价格,所以我们可以以每两个相邻元素作为一个局部考虑,即后一天的股价比前一天的高,我们就卖出然后计算收益;后一天的股价比前一天的低或者相等,我们就保留股票避免亏损(当然这在现实中是不可能的)。遍历数组,把所有的局部最大收益相加,得到总体最大收益。
代码:
public int maxProfit(int[] prices) {
//初始化收益
int profit=0;
//如果传入的数组内没有元素,则返回0
if(prices.length==0){
return 0;
}
//这个地方运用贪心算法,即每两个相邻元素为单位,假设每次都获取最大,总体最大利润就是局部最大利润的和
for(int i=0;i<prices.length-1;i++){
if(prices[i]<prices[i+1]){
profit+=prices[i+1]-prices[i];
}
}
return profit;
}