Я пытаюсь выполнить 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

Объяснение:

Нам нужно рассчитать максимально возможную высоту штабелей; высота эквалайзера: чтобы все стопки были одинаковой высоты, мы можем:

  1. Cвычислите сумму высот всех трех стеков и сохраните их в переменных sum1, sum2 и sum3.
  2. Инициализируйте три переменные i, j, k равными 0, представляющими текущую вершину стеков h1, h2 andh3.
  3. Цикл, пока суммы всех трех стеков не станут равными:

а. Если сумма h1 больше, чем сумма h2 или h3, то удалите верхний цилиндр из h1 и обновите сумму1.

б. Если сумма h2 больше, чем сумма h1 или h3, то удалите верхний цилиндр из h2 и обновите сумму2.

в. Если сумма h3 больше, чем сумма h1 или h2, то удалите верхний цилиндр из h3 и обновите сумму3.

д. Если все три суммы равны, вернуть любую из сумм.

tl;dr:

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

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

Богдан Тудораче | Основатель @ berrynews.org

Если вам понравилась статья и вы хотите меня поддержать, сделайте следующее:

  • 👏 Аплодируйте истории (50 хлопков), чтобы эта статья попала в топ
  • 🔔 Подпишитесь на меня в Среднем
  • 📰 Дополнительные материалы по кодированию на Coding Challenge
  • 🔔 Подключиться со мной: LinkedIn| Реддит