zoukankan      html  css  js  c++  java
  • leetcode 【 Best Time to Buy and Sell Stock 】python 实现

    思路

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

    If you were only permitted to complete at most one transaction (ie, buy one and sell one share of the stock), design an algorithm to find the maximum profit.

    代码:oj测试代码 Runtime: 111 ms

     1 class Solution:
     2     # @param prices, a list of integer
     3     # @return an integer
     4     def maxProfit(self, prices):
     5         # none case or one element case
     6         if prices is None or len(prices)<2 :
     7             return 0
     8         # dp
     9         min_buy = 0
    10         max_profit = 0
    11         for i in range(1,len(prices)):
    12             if prices[i]<prices[min_buy]:
    13                 min_buy = i
    14             max_profit = max(prices[i]-prices[min_buy],max_profit)
    15         return max_profit

    思路

    典型的动态规划题目。

    跟求最小子集的和这道题(http://www.cnblogs.com/xbf9xbf/p/4240510.html)类似。

    个人认为这类题目的精髓在于“在每一步,我们维护两个变量,一个是全局最优,就是到当前元素为止最优的解是,一个是局部最优,就是必须包含当前元素的最优的解”。

    对于这道题来说,有一个小梗需要想明白:如果prices[i]就是到i为止最小的值,那么prices[i]-prices[min_buy]不是等于0了么?

    请注意,回顾动态规划的规则:一定要包含当前元素的最优解。既然当前元素已经是历史最小值了,那么还非要包含当前元素的最优解,不正是他自身减去自身么?

    维护一个max_profit(最大利润),一个min_buy(历史最低点)。

    1. 如果当前的prices[i]小于prices[min_buy],则更新min_buy。

    2. 取prices[i]-prices[min_buy]和max_profit中较大的一个,作为max_profit的值。

    最后返回max_profit即可。

  • 相关阅读:
    PostgreSQL-14-异常值处理
    Python-5-字符串方法
    Python-6-字典-函数dict,字典的基本操作及将字符串设置功能用于字典
    STP-6-快速生成树协议-新端口角色,状态和类型以及新链路类型
    PostgreSQL-13-缺失值处理
    IP服务-6-SNMP
    IP服务-7-系统日志
    Python-4-设置字符串的格式字符串
    IP服务-5-网络时间协议
    Python -3-列表和元组
  • 原文地址:https://www.cnblogs.com/xbf9xbf/p/4264748.html
Copyright © 2011-2022 走看看