121. leetcode mejor momento para comprar y las existencias comerciales de vender el mejor tiempo de programación dinámica

121. leetcode mejor momento para comprar y las existencias comerciales de vender el mejor tiempo de programación dinámica

leetcode 2020 1 pregunta de marzo de golpe diaria

Título:
Dada una matriz, que i-ésimo elemento es una población determinada precios i-día. Si sólo se le permite hasta completar una transacción (es decir, la compra y venta de una acción), para diseñar un algoritmo para calcular el beneficio máximo que se puede conseguir. Tenga en cuenta que no se puede vender la acción antes de las poblaciones de compra.

Ejemplo 1:
Entrada: [7,1,5,3,6,4]
de salida: 5
Explicación: Día 2 (= 1 precio de la acción), al comprar, en el día 5 (precio de la acción = 6) cuando venta, la ganancia máxima = 6-1 = 5.
Tenga en cuenta que los beneficios no pueden ser 7-1 = 6, debido a que el precio de venta debe ser mayor que el precio de compra.
Ejemplo 2:
Entrada: [7,6,4,3,1]
de salida: 0
Explicación: En este caso, no hay ninguna transacción se ha completado, la ganancia máxima es de 0.

Fuente: estancia botón (LeetCode)
enlace: https: //leetcode-cn.com/problems/best-time-to-buy-and-sell-stock

Ideas: PythonProgramación dinámica: Los días como máximo antes de beneficios i = max {i-1 antes del día del máximo beneficio, el precio del día i - i-1 El precio mínimo del día anterior}.

Acaba de empezar a mirar pregunta, por muy simple suficiente de dos tiempos, a continuación, las horas extraordinarias, encontré la forma en que tan ingenuo. Para ser bueno en el descubrimiento de regulación dinámica de pensar solución ah! Lo más alarmante es que ni siquiera había pensado en esta pregunta con un regulación de movimiento.

código de tiempo de espera:

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        best=0
        for i in range(0,len(prices)):
            for j in range(i+1,len(prices)):
                mon=prices[j]-prices[i]
                if mon>0 and mon>best:
                    best=mon
        
        return best

detalles:

  1. Buscando el elemento más pequeño en la lista: a = min (lista)
  2. lista1 [: i]: Lista de los representados en los elementos 0,1,2 ..., i-1

código de programación dinámica:

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        # 动态规划:前i天的最大收益 = max{前i-1天的最大收益,第i天的价格-前i-1天中的最小价格}
        max_i=0
        for i in range(1,len(prices)):
            max_i=max(max_i,prices[i]-min(prices[:i]))
        
        return max_i
               

Este blog es un trabajo original, la bienvenida a la orientación, reproduce, por favor indique la fuente, adjuntar un enlace a este artículo, gracias!

Publicado 20 artículos originales · ganado elogios 1 · visitas 197

Supongo que te gusta

Origin blog.csdn.net/weixin_43973433/article/details/104917037
Recomendado
Clasificación