Leetcode 121 Meilleur moment pour acheter et vendre des actions

Description du problème :
étant donné un tableau de prix, son i-ème élément price[i] représente le prix d'une action donnée le i-ème jour.

Vous ne pouvez choisir d’acheter l’action qu’un jour et de la vendre un autre jour dans le futur. Concevez un algorithme pour calculer le profit maximum que vous pouvez réaliser.

Renvoie le profit maximum que vous pouvez tirer de cette transaction. Si vous ne pouvez réaliser aucun profit, renvoyez 0.

Exemple :
Entrée : [7,1,5,3,6,4]
Sortie : 5
Explication : Acheter le jour 2 (cours de l'action = 1) et vendre le jour 5 (cours de l'action = 6) Out, le profit maximum = 6 -1 = 5.
Notez que le profit ne peut pas être 7-1 = 6, car le prix de vente doit être supérieur au prix d'achat ; en même temps, vous ne pouvez pas vendre l'action avant de l'acheter.

Solution 1 :
Parcourez le tableau et calculez à chaque fois le cours minimum de l'action et le profit maximum jusqu'au jour en cours. Parce que le profit maximum doit être acheté au point le plus bas et vendu au point le plus haut.
Complexité temporelle : O(n), parcourez le tableau une fois.
Complexité spatiale : O(1), utilisant un nombre limité de variables.

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        max_profit = 0
        min_price = float("inf")
        for i in prices:
            if i<min_price:
                min_price = i
            cur_profit = i - min_price
            if cur_profit>max_profit:
                max_profit = cur_profit
        return max_profit

Solution 2 : Programmation dynamique , la méthode pour les problèmes de stock est la "programmation dynamique" car elle contient des sous-problèmes qui se chevauchent, c'est-à-dire que le meilleur moment pour acheter et vendre des actions est déterminé par l'état précédent d'achat ou de non-achat, et le précédent état d'achat ou de non-achat Il est déterminé par l'état antérieur. Ici, dp[i] représente le profit maximum du i jour précédent
Insérer la description de l'image ici

class Solution:
    def maxProfit(self, prices: List[int]) -> int:
        n = len(prices)
        if n== 0 : return 0
        dp = [0]*n
        min_price =prices[0]
        for i in range(1,n):
            min_price = min(min_price,prices[i])
            dp[i] = max(dp[i-1],prices[i]-min_price)
        return dp[-1]

Analyse
de complexité Complexité temporelle : O(n).
Complexité spatiale : O(n).

Référez-vous : problèmes de stock (Python3, C++)

Je suppose que tu aimes

Origine blog.csdn.net/Rolandxxx/article/details/128564174
conseillé
Classement