Я пытаюсь выполнить 30-дневное испытание кодирования на python, и в этой статье я буду выяснять, как найти равную высоту из 3 стеков последний пришел – первый ушелпринцип (LIFO)
Если вы не знали, стеки — это LIFO, а очереди — FIFO (первым пришел — первым обслужен).
Источник"
У вас есть три стопки цилиндров [..], но они могут различаться по высоте. Вы можете изменить высоту стопки, удаляя и выбрасывая самый верхний цилиндр любое количество раз.
Найдите максимально возможную высоту стопки, чтобы все стопки были одинаковой высоты. Это означает, что вы должны удалить ноль или более цилиндров с вершины нуля или более из трех стопок, пока они не станут одинаковой высоты, а затем вернуть высоту.
Проблема:
Решение:
def equalStacks(h1, h2, h3): """ Finds the maximum possible height of three stacks of cylinders such that all of the stacks are exactly the same height. Args: h1 (list of int): Heights of cylinders in the first stack, from top to bottom. h2 (list of int): Heights of cylinders in the second stack, from top to bottom. h3 (list of int): Heights of cylinders in the third stack, from top to bottom. Returns: int: The height of the stacks when they are equalized. """ sum1, sum2, sum3 = sum(h1), sum(h2), sum(h3) i, j, k = 0, 0, 0 while (sum1 != sum2 or sum2 != sum3): if sum1 >= sum2 and sum1 >= sum3: sum1 -= h1[i] i += 1 elif sum2 >= sum1 and sum2 >= sum3: sum2 -= h2[j] j += 1 elif sum3 >= sum1 and sum3 >= sum2: sum3 -= h3[k] k += 1 return sum1 # or sum2 or sum3
Объяснение:
Нам нужно рассчитать максимально возможную высоту штабелей; высота эквалайзера: чтобы все стопки были одинаковой высоты, мы можем:
- Cвычислите сумму высот всех трех стеков и сохраните их в переменных
sum1
,sum2
иsum3
. - Инициализируйте три переменные
i, j, k
равными 0, представляющими текущую вершину стековh1, h2 andh3
. - Цикл, пока суммы всех трех стеков не станут равными:
а. Если сумма h1 больше, чем сумма h2 или h3, то удалите верхний цилиндр из h1 и обновите сумму1.
б. Если сумма h2 больше, чем сумма h1 или h3, то удалите верхний цилиндр из h2 и обновите сумму2.
в. Если сумма h3 больше, чем сумма h1 или h2, то удалите верхний цилиндр из h3 и обновите сумму3.
д. Если все три суммы равны, вернуть любую из сумм.
tl;dr:
Из описания у вас всегда будут стеки, которые можно уравнять → вам нужно только напечатать сумму, где они уравниваются.
Это все игра на сумму, чтобы выяснить, какой из них является самым большим уравненным стеком.
Богдан Тудораче | Основатель @ berrynews.org
Если вам понравилась статья и вы хотите меня поддержать, сделайте следующее:
- 👏 Аплодируйте истории (50 хлопков), чтобы эта статья попала в топ
- 🔔 Подпишитесь на меня в Среднем
- 📰 Дополнительные материалы по кодированию на Coding Challenge
- 🔔 Подключиться со мной: LinkedIn| Реддит