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

Описание:

Алекса дается n стопок одинаковой или неравной высоты. За один шаг Alexa может удалить любое количество коробок из стопки, имеющей максимальную высоту, и попытаться сделать ее равной той, которая чуть меньше максимальной высоты стопки. Определите минимальное количество ступенек, необходимых для того, чтобы все сваи были равны по высоте.

Пример 1:

Input: piles = [5, 2, 1]
Output: 3
Explanation:
Step 1: reducing 5 -> 2 [2, 2, 1]
Step 2: reducing 2 -> 1 [2, 1, 1]
Step 3: reducing 2 -> 1 [1, 1, 1]
So final number of steps required is 3.

Решение:

Давайте визуализируем груды, давайте использовать A вместо ящиков

5: AAAAA

2: AA

1: A

На первом этапе мы сокращаем 5: AAAAA до 2: AA.

2: AA

2: AA

1: A

На втором этапе мы разрезаем первые струны 2: AA на 1: A.

1: A

1: AA

1: A

На третьем этапе мы разрезаем первые струны 2: AA на 1: A.

1: A

1: A

1: A

Если у нас будет две стопки одинаковой длины, например:

5: AAAAA

5: AAAAA

1: A

На первом этапе мы сокращаем первые 5: AAAAA до 1: A:

1: A

5: AAAAA

1: A

На втором этапе мы сокращаем вторые 5: AAAAA до 1: A:

1: A

1: A

1: A

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

Код C ++:

int solution(vector<int> v) {
    int v_size = v.size();
    if(v_size < 2) { return 0; }
    std::sort(v.begin(), v.end());
    int sum = 0;
    for (int i = 1; i < v_size; ++i) {
        if (v[v_size - i - 1] != v[v_size - i]) {
            sum += i;
        }
    }
    return sum;
}

Сложность этого решения составляет O (N * Log (N)), где N - длина строки, но я считаю, что есть решение с линейной сложностью, которое я просто не могу хорошо обработать во всех угловых случаях.

Репозиторий с полной версией проекта вы можете найти здесь: https://github.com/jolly-fellow/microsoft/tree/master/min_steps_to_make_piles_equal_height

Вернуться к оглавлению.