zoukankan      html  css  js  c++  java
  • 边工作边刷题:70天一遍leetcode: day 14

    Best Time to Buy and Sell Stock III/IV

    IV是k的解,可以特殊化到2的。有趣的问题是III的左右两遍扫描解法和IV的关联性。其实在从左向右扫描的时候就是更新global[i][1],从右向左扫描是更新global[i][2](基于global[i][1])。为什么IV中要maintain local而III没有还没有理解透,现在的想法是实际上每次计算global的时候已经包含了local的计算,因为local的主要目的是从k-1次交易构建第k次交易。

    还有一个细节就是在当天是可以同时买卖的,这样在计算2次交易profit的时候(III),是左右同一天的profit加和。而IV,local也是用的前一天的卖的情况(所以前一天可以再买回来今天再卖)

    class Solution(object):
        def maxProfit(self, prices):
            """
            :type prices: List[int]
            :rtype: int
            """
            maxProfit = 0
            n = len(prices)
            if n<2: return 0
    
            profits = [0]*n
            minPrice = prices[0]
            for i in range(1, n):
                maxProfit = max(maxProfit, prices[i] - minPrice)
                profits[i]=maxProfit
                minPrice = min(minPrice, prices[i])
            print maxProfit
            maxPrice = prices[n-1]
            maxProfit = 0
            for i in range(n-2, -1, -1):
                maxProfit = max(maxProfit, maxPrice - prices[i]+profits[i])
                maxPrice = max(maxPrice, prices[i])
                
            return maxProfit
    
  • 相关阅读:
    非vue-cli的花括号闪现问题
    vue中实现图片全屏缩放预览,支持移动端
    vue 图片预览插件
    angular.uppercase()
    angular.toJson()
    angular.module()
    对AngularJs的简单了解
    jQuery的属性、遍历和HTML操作
    JQuery函数
    JQuery的选择器
  • 原文地址:https://www.cnblogs.com/absolute/p/5677829.html
Copyright © 2011-2022 走看看