Jianzhi ofrecen notas de cepillado-63. El beneficio máximo de las acciones

Inserte la descripción de la imagen aquí
La primera idea es recorrer la matriz y registrar la ganancia máxima y el precio mínimo generado previamente. Debido a que el título estipula comprar y luego vender, la máxima ganancia posible para cada iter a vender es el precio actual menos el precio histórico más bajo. Luego compare el beneficio actual del iter con el beneficio máximo histórico para actualizar el beneficio máximo histórico. Si el precio actual es menor que el precio mínimo histórico, se actualiza el precio mínimo histórico.
el código se muestra a continuación

class Solution(object):
    def maxProfit(self, prices):
        """
        :type prices: List[int]
        :rtype: int
        """
        if len(prices) == 0:
            return 0
        max_pft = 0
        min_price = prices[0]
        for i in prices:
            if i <= min_price:
                min_price = i
            else:
                pft = i - min_price
                if pft > max_pft:
                    max_pft = pft
        return max_pft

La velocidad y la memoria son más del 60%, pero al ver la desintegración del pensamiento, en realidad se encuentra esta solución con programación dinámica, así que haz un poco de conocimiento sobre programación dinámica:
Este artículo habla muy claramente, en el primer enlace .
Después de leer este artículo , Encontré que esta pregunta es demasiado simple, no una pregunta típica de programación dinámica. Los problemas aplicables a la programación dinámica cumplen dos características: 1. La solución óptima puede estar compuesta por las soluciones óptimas de sus subproblemas. Esta pregunta se ajusta a esta característica. El beneficio máximo del precio [: i] se puede obtener del beneficio máximo del precio [: i-1] y el valor máximo del precio [i] -min_price. El beneficio máximo del precio [: i-1], Es la solución óptima de un subproblema.
2. En el proceso de búsqueda de la solución óptima, la solución del subproblema óptimo se calculará repetidamente. La programación dinámica puede evitar el doble cálculo registrando las soluciones de los subproblemas que se han resuelto. Esta pregunta no cumple con esta característica.
Por tanto, se puede ver que la programación dinámica todavía se enfrenta a problemas más complejos.

Supongo que te gusta

Origin blog.csdn.net/baidu_37360677/article/details/108563835
Recomendado
Clasificación