zoukankan      html  css  js  c++  java
  • 123. Best Time to Buy and Sell Stock III

        /*
         * 123. Best Time to Buy and Sell Stock III
         * 2016-5-21 by Mingyang
         * 根据题目要求,最多进行两次买卖股票,而且手中不能有2只股票,就是不能连续两次买入操作。
         * 所以,两次交易必须是分布在2各区间内,也就是动作为:买入卖出,买入卖出。
         * 进而,我们可以划分为2个区间[0,i]和[i,len-1],i可以取0~len-1。
         * 那么两次买卖的最大利润为:在两个区间的最大利益和的最大利润。
         * 一次划分的最大利益为:Profit[i] = MaxProfit(区间[0,i]) + MaxProfit(区间[i,len-1]);
         * 最终的最大利润为:MaxProfit(Profit[0], Profit[1], Profit[2], ... , Profit[len-1])。
         * 这道题目的思路一开始我想用Greedy,来找到最大的两个,但发现这个用greedy的话需要更新range
         * 后面想到了dp,left[i]表示从0到i这个range以后买卖一次的最高获利,其实就是跟I题差不多的问题
         * 最后再加起来结果
         */
          public int maxProfit1(int[] prices) {
              if(prices==null||prices.length==0)
                return 0;
              int[] left=new int[prices.length];
              int[] right=new int[prices.length];
              int localMax=0;
              int min=Integer.MAX_VALUE;
              for(int i=0;i<prices.length;i++){
                  if(prices[i]<min){
                      min=prices[i];
                  }else{
                      localMax=Math.max(localMax,prices[i]-min);
                  }
                  left[i]=localMax;
              }
              localMax=0;
              int max=Integer.MIN_VALUE;
              for(int i=prices.length-1;i>=0;i--){
                  if(prices[i]>max){
                      max=prices[i];
                  }else{
                      localMax=Math.max(localMax,max-prices[i]);
                  }
                  right[i]=localMax;
              }
              int maxProfit=0;
              for(int i=0;i<prices.length;i++){
                  maxProfit=Math.max(maxProfit,left[i]+right[i]);
              }
              return maxProfit;
            }
  • 相关阅读:
    基于Linux和Postfix的邮件系统的web mail安装手册(转)
    CodeGear Delphi 2007 for Win32 专业版下载地址及安装、破解方法
    Windows XP下屏蔽Ctrl_Alt_Del键的方法
    Cisco IOS 基本命令集
    WINDOWS下进程详解
    PHP 5.0 的变化与PHP 6.0 展望
    常用开源控件
    Windows XP下屏蔽Ctrl_Alt_Del键的方法
    Delphi 2007企业版安装指南
    PHP 5.0 的变化与PHP 6.0 展望
  • 原文地址:https://www.cnblogs.com/zmyvszk/p/5516002.html
Copyright © 2011-2022 走看看