2.买卖股票的最佳时机

五迷三道 提交于 2020-01-26 03:15:49

在这里插入图片描述
在这里插入图片描述

package LeetCodeDemo.primary;

public class Demo22 {
        public static void main(String[] args){
            Demo22 demo22 = new Demo22();
            int[] nums = {2,2,5};
            System.out.println(demo22.maxProfit(nums));
        }



    public int maxProfit(int[] prices) {
        int arrLen = prices.length;
        if (arrLen == 1){
            return 0;
        }
        int i ;
        int val = 0; // 用来表示最终的利润
        int initVal = 0 ; // 用来表示持有成本
        boolean flag = false;
        for ( i = 0 ; i < arrLen; i++ ){
            if ( i == 0 ){
                // 最开始的情况, 判断是否需要直接入手
               if (prices[0] - prices[1] < 0){
                   initVal = prices[0];
                   flag = true;
               }
                continue;
            }

            if (i == arrLen - 1){
                // 对于最后一个同样的道理, 判断是否还有股票在手中,毕竟这时候买入没有意义
                if (flag == true && prices[i] - prices[i-1] >= 0){
                    val += prices[i] - initVal;
                }
                break;
            }

            if (flag){
                // 表示已有股票在手,那么需要一个判断出手的条件。
                // 对于股票,如果后一天的行情比前一天差,那么就直接出手
                if (prices[i] - prices[i+1] >= 0){
                    val += prices[i] - initVal;  // 用当前值减去持有价格
                    flag = false;
                }

            }else {
                // 当前没有股票在手上
                if (prices[i] - prices[i-1] <= 0  && prices[i+1] - prices[i] > 0){
                    // 这里是先判断是否入手该股票, 显然满足此条件是有利润可言的,对于股票来说,只要有利润就直接入手。
                    initVal = prices[i];
                    flag = true;
                }
            }
        }
        return val;
    }
}


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!