[leetcode] 122. 买卖股票的最佳时机 II
对于没有炒过股票的同学来说,题目描述的不太清楚,同一支股票一天只能交易一次,要不买、要不卖,一天内不能卖了再买。
这样的话整个交易就是线性的,不存在交叉的选择。如果把股票价格用折线图画出来,实际上只买处于上升的阶段即可。
所以问题转变成判断折线的增降,累加出所有的增区间的纵坐标之差,即为所求答案。
class Solution {
public int maxProfit(int[] prices) {
int max = -1;
int min = -1;
int ans = 0;
int i = 0;
int length = prices.length;
while (i < length) {
// find first min
min = prices[i];
i++;
while (i < length && min >= prices[i]) {
min = prices[i];
i++;
}
if (i == length) {
if (max != -1 && min != -1) {
ans += max - min;
}
return ans;
} else {
// find next max
max = prices[i];
i++;
while (i < length && max < prices[i]) {
max = prices[i];
i++;
}
ans += max - min;
max = -1;
min = -1;
}
}
return ans;
}
}