zoukankan      html  css  js  c++  java
  • 123. Best Time to Buy and Sell Stock (三) leetcode解题笔记

    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).

    让我们看看它又耍了什么新花样 还是找最大利润  但是只允许你交易两次 还是在买之前必须把之前买的卖出去

    没思路。。  有点棘手。。

    能在遍历一遍的情况下得到解吗  感觉可以。。想一会先

    怎么感觉这种题好适合股票啊 。。完全没思路

    还是维护一个最小值 和 利润值  交易过后重置最小值  同时维护最大的两个利润值?

    没思路 去discuss区看看大神怎么解的- -

    public class Solution {
        public int maxProfit(int[] prices) {
            int hold1 = Integer.MIN_VALUE, hold2 = Integer.MIN_VALUE;
            int release1 = 0, release2 = 0;
            for(int i:prices){                              // Assume we only have 0 money at first
                release2 = Math.max(release2, hold2+i);     // The maximum if we've just sold 2nd stock so far.
                hold2    = Math.max(hold2,    release1-i);  // The maximum if we've just buy  2nd stock so far.
                release1 = Math.max(release1, hold1+i);     // The maximum if we've just sold 1nd stock so far.
                hold1    = Math.max(hold1,    -i);          // The maximum if we've just buy  1st stock so far. 
            }
            return release2; ///Since release1 is initiated as 0, so release2 will always higher than release1.
        }
    }

      空间复杂度o(1) 时间复杂度o(n)

    理解一下各个字段 hold1 买入第一个商品的当前最大值 hold2买入第二个商品的当前最大值  release1卖出第一个商品的当前最大值  release2卖出第二个商品的当前最大值

    不是很理解  决定在eclipse设置一个案例试试。

    给定的数组为2,5,8,3,18,12,6,53,59,11

    public static void main(String[] args){
    		test test =new test();
    		test.Solution solution=test.new Solution();
    		System.out.print(solution.maxProfit(new int[]{2,5,8,3,18,12,6,53,59,11}));
    	}
    

      输出结果为

    看看调试中这四个变量的变化 在Hold1前设置断点

    读入第一个数2 没什么大变化

    读入第二个数5 release1和release2变成3 

    省略一些  读到18时看看各个值

    release2就是目前阶段的解。。。   看不懂 先这样吧 - -

  • 相关阅读:
    记一次HTTP劫持故障排查
    前面任意字符+固定字符+任意字符+固定字符匹配
    php-fpm启动,重启,终止操作
    crontab防止脚本周期内未执行完重复执行
    js深拷贝和浅拷贝
    vue 异步刷新页面,
    vue强制刷新组件
    js判断终端以及APP应用判断
    微信返回上一页的按钮会强制性使用页面缓存,不刷新页面
    json键和值转数组
  • 原文地址:https://www.cnblogs.com/Mrjie/p/6009842.html
Copyright © 2011-2022 走看看