题意
给定一串数组来表示股票的价格,你可以买卖多次,算出你能赚取得最大钱数。(前提是在你买之前,必须把股票卖出去)
我的想法
要算出赚钱的最大钱数,必须把每个递增过程赚到。首先在遍历过程中判断一下数组是否是递增还是递减,如果是递增记录递增开始的最小值;如果是从递增变成了递减
我的代码
这里面遇到几个疏忽,比如如果是以递增结束数组,那么后续就没有加上最后一段递增的值1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24public class Solution {
public int maxProfit(int[] prices) {
if(prices.length<2) return 0;
boolean flag = (prices[1] - prices[0])>=0? true:false;//true表示递增,false表示递减
int result = 0,start=prices[0],end=prices[1];
for(int i=2;i<prices.length;i++){
if(prices[i]>=prices[i-1]&&!flag) //处理递减变递增的拐点
{
flag = true;
start = prices[i-1];
end = prices[i];
}
if(prices[i]>prices[i-1]&&flag) end = prices[i];//防止递增结束数组没有记录end值
if(prices[i]<prices[i-1]&&flag) //处理递增变递减的拐点
{
flag = false;
end = prices[i-1];
if(end>start) result += (end-start);
}
}
if(flag) result += (end-start);
return result;
}
}
大神代码
得到所有递增段,只要后一个数大于前一个数就减法累加。给跪了= =
1 | public int maxProfit(int[] prices) { |