Минимальное количество конфет, необходимое для раздачи детям в зависимости от заданных условий

Опубликовано: 22 Сентября, 2022

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

Примеры:

Input: arr[] = {1, 0, 2}
Output: 5
Explanation:
Consider the distribution of candies as {2, 1, 2} that satisfy the given conditions. Therefore, the sum of candies is 2 + 1 + 2 = 5, which is the minimum required candies.

Input: arr[] = {1, 2, 2}
Output: 4

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

  • Инициализируйте массив, скажем, ans[] для хранения количества конфет, назначенных каждому дочернему элементу, и инициализируйте его 1 для каждого элемента массива ans[] .
  • Пройдите по заданному массиву arr[] и, если значение arr[i + 1] больше, чем arr[i], затем обновите значение ans[i + 1] как ans[i] + 1 .
  • Пройдите по данному массиву сзади и выполните следующие шаги:
    • Если значение arr[i] больше, чем arr[i + 1] , а значение ans[i] меньше или равно ans[i + 1] , тогда обновите значение ans[i] как ans[ я + 1] + 1 .
  • После выполнения вышеуказанных шагов выведите сумму массива ans[] как результирующую сумму конфет.

Ниже приведена реализация вышеуказанного подхода:

Временная сложность: O(N)
Вспомогательное пространство: O(N)