Мне задавали этот вопрос во время собеседования для запуска и видели это снова в недавнем конкурсе
** Вопрос:
Вам даются цены на акции за несколько дней. Каждый день вы можете купить одну единицу акций, продать любое количество акций, которые вы уже купили, или ничего не делать. Какова максимальная прибыль, которую вы можете получить, оптимально спланируя свою торговую стратегию? **
Примеры (входные данные, которые могут меняться без дней)
5 3 2 = > profit = 0//поскольку цена уменьшается каждый день, максимальная прибыль, которую мы можем сделать = 0
1 2 100 = > прибыль = 197
1 3 1 2 = > прибыль = 3//мы покупаем по 1 штуке по цене 3, затем покупаем по 1 и продаем по 2-й прибыли = 3
Мое решение:
a) Найдите день, когда цена акций была самой большой. Продолжайте покупать 1 единицу товара до этого дня.
b) Если этот день последний день, то выйдите из него:
еще: Продайте все акции в этот день и разделите массив после этого дня и отчитайте оставшиеся элементы
c) объединить прибыль
например, 1 4 1 2 3
а) самая высокая цена акций на 2-й день.. поэтому мы покупаем акции на 1-й день и продаем их на 2-й день (прибыль = 3), затем мы рекурсируем в оставшиеся дни: 1 2 3
b) Максимальная цена - 3 (на 5-й день), поэтому мы продолжаем покупать акции на 3-й день и 4-й день и продавать на 5-й день (прибыль = (3 * 2 - 3 = 3)
c) Общая прибыль = 3 + 3 = 6
Сложность этого оказывается равной O (n ^ 2). это решение прошло 10 из 11 случаев, но превысило лимит времени на последнем тестовом примере (т.е. самый большой вход)
Итак, мой вопрос: может ли кто-нибудь подумать об более эффективном решении этой проблемы? Есть ли решение для динамического программирования?
P.S: это первый раз, когда я задаю здесь вопрос. поэтому, пожалуйста, дайте мне знать, если мне нужно улучшить/добавить что-то к этому вопросу.