[leetcode] 122. 买卖股票的最佳时机 II

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;
    }
    
}
posted @ 2019-01-18 00:14  ACBingo  阅读(207)  评论(0编辑  收藏  举报