假设你有一个数组,它的第i个元素是一支给定的股票在第i天的价格。设计一个算法来找到最大的利润。你最多可以完成两笔交易。您在真实的面试中是否遇到过这个题?
Yes
样例
给出一个样例数组 [4,4,6,1,1,4,2,5], 返回 6
注意
你不可以同时参与多笔交易(你必须在再次购买前出售掉之前的股票)
标签 Expand
相关题目 Expand
解题思路:
比如给定一组数组,[1,2,3,6,9,3,10]
最多可以2次去获取最大的利益,可以用2分的思想,分成2部分,从0元素开始遍历分别求出左右2边的最大利益,求出的左右2边最大的利益即为解。
class Solution {
/**
* @param prices: Given an integer array
* @return: Maximum profit
*/
public int maxProfit(int[] prices) {
// write your code here
if(null==prices||0==prices.length) return 0;
int sumProfit = 0;
for(int i=1;i<prices.length;i++){
int tmpsum = maxProfit(prices, 0, i) + maxProfit(prices, i+1, prices.length-1);
sumProfit = Math.max(sumProfit, tmpsum);
}
return sumProfit;
}
public int maxProfit(int[] prices,int s,int e){
if(e<=s) return 0;
int min = prices[s];
int maxProfit = 0;
for(int i=s+1;i<=e;i++){
maxProfit = Math.max(maxProfit, prices[i]-min);
min = Math.min(min, prices[i]);
}
return maxProfit;
}
};