Difficulty: Easy Language: JavaScript

описание проблемы

Вы задали массив цен, где цены[i] — это цена данной акции
на i-й день.

Вы хотите максимизировать свою прибыль, выбрав один день для покупки одной акции и выбрав другой день в будущем для продажи этой акции.

Верните максимальную прибыль, которую вы можете получить от этой сделки.
Если вы не можете получить никакой прибыли, верните 0.

Объяснение 1: Купить во второй день (цена = 1) и продать в пятый день (цена = 6), прибыль = 6–1 = 5. Не 7–1 = 6, поскольку цена продажи должна быть выше цены покупки.

Обратите внимание, что покупка во второй день и продажа в первый день не разрешены
, поскольку вы должны купить перед продажей.

Объяснение 2: В этом случае транзакции не выполняются, а максимальная прибыль = 0.

Решение грубой силы — O (n²)

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

Неудачная временная сложность: O(n²)
Входной размер равен 10⁵, поэтому вложенный цикл вызовет TLE (превышение ограничения по времени).

Лучшее решение — O(n)

Мы можем просмотреть все цены и вместо этого мы можем отслеживать минимальную цену и вычитать ее из цен продажи вот так.

Анализ сложности

Временная сложность: O(n)
Пространственная сложность: O(1)

Это решение отлично работает!

Исходный код :) https://github.com/codeXXripper/Leetcode-JS

Подпишитесь на меня, чтобы узнать больше

https://www.linkedin.com/in/israel-fitsum/