贪心算法--计算股票买卖(II)题目:https://leetcode.com/problems/best-time-to-buy-and-sell-stock-ii/
股票买卖(II)可以实现多次买卖股票
贪心思想:如果明天的价格比今天的价格高,就可以今天买入,明天卖出。如果后天比明天价格高,明天买入,后天卖出。
同一天可以买入,也可以卖出。
/**
* 贪心算法
* @param prices
* @return
*/
public static int maxProfit(int[] prices) {
int temp=0;
int diff=0;
for(int i=1;i<prices.length;i++){
if(prices[i]-prices[i-1]>0){
diff=prices[i]-prices[i-1];
temp+=diff;
}
}
return temp;
}
在每一天不能同时进行买卖。
解决方法:先寻找递减的局部最小值,再寻找递增的局部最大值,计算差值累加。
/**
* 先寻找递减的局部最小值,再寻找递增的局部最大值,计算差值累加。
* @param prices
* @return
*/
public static int maxProfit2(int[] prices) {
int i=0;
int buy;
int sale;
int temp=0;
while(i<prices.length){
while(i+1<prices.length && prices[i+1]<prices[i]){
i++;
}
buy=i;
i++;
while(i<prices.length && prices[i]>prices[i-1]){
i++;
}
sale=i-1;
temp+=prices[sale]-prices[buy];
}
return temp;
}