https://leetcode.com/problems/distribute-candies-to-people Easy

Условие

Имеется candies конфет и num_people человек. Конфеты раздаются по очереди: первому человеку — 1 конфета, второму — 2 и так далее, пока конфеты не закончатся. Если конфет остаётся меньше, чем нужно дать человеку, отдают всё, что осталось. Затем снова начинают с первого человека, каждый раз увеличивая количество раздаваемых конфет на 1. Верни массив, сколько конфет получил каждый человек.

Примеры

Input: candies = 7, num_people = 4 Output: [1, 2, 3, 1] Explanation: 1-му: 1 конфета, 2-му: 2 конфеты, 3-му: 3 конфеты, 4-му: 1 конфета (остаток).

Input: candies = 10, num_people = 3 Output: [5, 2, 3] Explanation: 1-му: 1 + 4 конфеты, 2-му: 2 конфеты, 3-му: 3 конфеты.

Решение

fun distributeCandies(candies: Int, num_people: Int): IntArray {
    val res = IntArray(num_people)
    var candy = candies
    var give = 1
    var i = 0

    while (candy > 0) {
        res[i % num_people] += minOf(give, candy) // Отдаём конфеты текущему человеку
        candy -= give                             // Уменьшаем остаток конфет
        give++                                    // Увеличиваем количество конфет для следующего
        i++                                       // Переходим к следующему человеку
    }

    return res
}

Временная сложность

O(sqrt(candies)), количество шагов зависит от общего числа конфет.

Пространственная сложность

O(num_people), память на результат.