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

    Say you have an array for which the ith element is the price of a given stock on day i.

    Design an algorithm to find the maximum profit. You may complete at most two transactions.

    Note:
    You may not engage in multiple transactions at the same time (ie, you must sell the stock before you buy again).

    public class Solution {
        public int maxProfit(int[] prices) {
            /*在整个区间的每一点切开,然后分别计算左子区间和右子区间的最大值,然后再用O(n)时间找到整个区间的最大值。
            看来以后碰到与2相关的问题,一定要想想能不能用二分法来做
            定义两个数组left和right,数组left[i]记录了price[0..i]的最大profit,数组right[i]记录了price[i..n]的最大profit。
            最后利用O(n)的时间求出Maxprofix = max(left(0,i) + right(i+1, n))  0<=i<n*/
            int len=prices.length;
            if(len<=0) return 0;
            int left[]=new int[len];
            int right[]=new int[len];
            left[0]=0;
            int minleft=prices[0];
            for(int i=1;i<len;i++){
                left[i]=Math.max(left[i-1],prices[i]-minleft);
                if(minleft>prices[i])minleft=prices[i];
            }
            right[len-1]=0;
            int maxright=prices[len-1];
            for(int j=len-2;j>=0;j--){
                right[j]=Math.max(right[j+1],maxright-prices[j]);
                if(maxright<prices[j])maxright=prices[j];
            }
            int res=0;
            for(int i=0;i<len;i++){
                int temp=right[i]+left[i];
                if(res<temp) res=temp;
            }
            return res;
        }
    }
  • 相关阅读:
    c++拷贝构造函数和赋值运算符
    c++运算符定义为成员函数还是非成员函数
    c++重载运算符位置的限制
    为什么operator<<运算符重载一定要为友元函数
    动态规划求一定数量骰子和的概率
    vector之reserve的坑
    c++ decltype和auto对比学习
    asio的前摄器模式
    动态显示当前时间
    js遍历二维数组
  • 原文地址:https://www.cnblogs.com/qiaomu/p/4674333.html
Copyright © 2011-2022 走看看