Рубрики
Без рубрики

Лучшее время для покупки и продажи акций в Python

Вы можете найти проблему LeetCode здесь. Вопрос: скажем, у вас есть массив, для которого это … Tagged с алгоритмами, Python, начинающие.

Вы можете найти проблему LeetCode Здесь Анкет

Вопрос:

Скажем, у вас есть массив, для которого элемент ITH является ценой данной акции в день I.

Если вам было разрешено завершить не более одной транзакции (то есть купить одну и продать одну акцию), разработать алгоритм, чтобы найти максимальную прибыль.

Обратите внимание, что вы не можете продать акцию, прежде чем купить ее.

Пример 1: Вход: [7,1,5,3,6,4] Вывод: 5 Объяснение: купить в день 2) и продавать в день 5),-1. Нет, так как цена продажи должна быть больше, чем цена покупки.

Пример 2: Ввод: [7,6,4,3,1] Вывод: 0 Объяснение: В этом случае транзакция не проводится, то есть макс.

Решение грубой силы:

Я бы использовал вложенную для цикла, чтобы сравнить число, а другие цифры справа от него, чтобы найти максимальную прибыль.

def maxProfit(prices):
        max_profit = 0

        for earlier_price in range(len(prices)):
            for later_price in range(earlier_price + 1, len(prices)):
                if profit < prices[later_price] - prices[earlier_price]:
                    max_profit = prices[later_price] - prices[earlier_price]
        return max_profit

Я обновляю MAX_PROFIT всякий раз, когда нахожу прибыль, которая больше. Для моих петлей я не хочу считать числа слева от eariler_price, и я не хочу дважды считать eariler_price. Чтобы предотвратить это, я увеличил начальный диапазон на 1 (более раннее_Прис + 1).

Если вы скопируете и вставите это решение в LeetCode, он даст вам время, потому что этот алгоритм работает во время O (n^2) и O (1) пространство. Мы по существу зацикливаемся на один раз по каждому номеру, когда все остальные числа.

Оптимальное решение:

Мы будем отслеживать MAX_PROFIT и минимальное число, которое мы видели до сих пор. Мы собираемся пройти через каждое число в списке и посмотреть, есть ли более низкий номер, чем наш минимум. Если есть, мы переназнаем минимальный_Нем. Мы также решаем, остается ли MAX_PROFIT неизменной или переназначим ее с нашей новой рассчитанной прибылью. Этот алгоритм не делает новое пространство и проходит только один раз.

def maxProfit(prices):
        max_profit = 0
        minimum_num = 100000

        for num in prices:
            if num < minimum_num:
                minimum_num = num
            max_profit = max(max_profit, num - minimum_num)
        return max_profit

Вам может быть интересно, почему наш минимум настолько высок? Откуда вы взяли этот номер? Это очень высокое число, которое я установил, потому что если бы я установил минимум_Не 0, то в нашем списке он может быть ниже, чем что -либо. Вы также можете установить Minimum_Num на первый номер в списке. Минимальный_Нем, скорее всего, будет заменен в первой итерации нашей петли.

max_profit = max(max_profit, num - minimum_num)

Я считаю, что это самый важный шаг в этом алгоритме, потому что именно там вы решаете, обновлять ли MAX_PROFIT или нет.

Вывод

Этот алгоритм использует жадный подход, в котором говорится, что у нас будет переменная/переменные, которые мы будем обновлять, поскольку мы найдем что -то лучше.

Спасибо за чтение!

Оригинал: “https://dev.to/jolouie7/best-time-to-buy-and-sell-stock-in-python-3pk7”