https://leetcode.com/problems/distribute-candies-to-people | Easy |
---|
Имеется candies
конфет и num_people
человек. Конфеты раздаются по очереди: первому человеку — 1 конфета, второму — 2 и так далее, пока конфеты не закончатся. Если конфет остаётся меньше, чем нужно дать человеку, отдают всё, что осталось. Затем снова начинают с первого человека, каждый раз увеличивая количество раздаваемых конфет на 1. Верни массив, сколько конфет получил каждый человек.
Input:
candies = 7, num_people = 4Output:
[1, 2, 3, 1]Explanation:
1-му: 1 конфета, 2-му: 2 конфеты, 3-му: 3 конфеты, 4-му: 1 конфета (остаток).
Input:
candies = 10, num_people = 3Output:
[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), память на результат.