【牛客】中国牛市

链接:https://www.nowcoder.com/questionTerminal/9370d298b8894f48b523931d40a9a4aa?orderByHotValue=0&query=%E9%A3%8E%E5%8F%A3%E7%9A%84%E7%8C%AA-%E4%B8%AD%E5%9B%BD%E7%89%9B%E5%B8%82&done=0&pos=1
来源:牛客网
 

[编程题]风口的猪-中国牛市

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,数组中第i个元素(prices[i])代表该股票第i天的股价。 假设你一开始没有股票,但有至多两次买入1股而后卖出1股的机会,并且买入前一定要先保证手上没有股票。若两次交易机会都放弃,收益为0。 设计算法,计算你能获得的最大收益。 输入数值范围:2<=n<=100,0<=prices[i]<=100

示例1

输入

3,8,5,1,7,8

输出

12

学习别人的思想

public class Main {
    public int calculateMax(int[] prices) {
        int firstBuy = Integer.MAX_VALUE;
        int afterFirstSell = 0;
        int afterSecondBuy = Integer.MIN_VALUE;
        int afterSecondSell = 0;
         for(int curPrice:prices){
             //买入的价格越小越好
             firstBuy = Math.min(firstBuy,curPrice);
             //第一次卖出去的收益,越大越好
             afterFirstSell = Math.max(afterFirstSell,curPrice-firstBuy);
             //第二次买入后的收益,越大越好
             afterSecondBuy = Math.max(afterSecondBuy,afterFirstSell-curPrice);
             //第二次卖出去的收益,越大越好
             afterSecondSell = Math.max(afterSecondSell,afterSecondBuy+curPrice);
         }
         return afterSecondSell;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章