Минимальное количество индексов, которые нужно пропустить для каждого индекса массива, чтобы сохранить сумму до этого индекса не более T

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

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

Примеры:

Input: N = 7, T = 15, arr[] = {1, 2, 3, 4, 5, 6, 7}
Output: 0 0 0 0 0 2 3 
Explanation: No indices need to be skipped for the first 5 indices: {1, 2, 3, 4, 5}, since their sum is 15 and <= T.
For the sixth index, indices 3 and 4 can be skipped, that makes its sum = (1+2+3+6) = 12.
For the seventh, indices 3, 4 and 5 can be skipped which makes its sum = (1+2+3+7) = 13.

Input: N = 2, T = 100, arr[] = {100, 100}
Output: 0 1

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

  • Создайте упорядоченную карту M , чтобы вести подсчет элементов до i -го индекса.
  • Инициализируйте переменную sum как 0 , чтобы сохранить сумму префикса.
  • Пройдите массив, arr[] используя переменную i
    • Сохраните разницу между sum+arr[i] и T в переменной d .
    • Если значение d>0 , пройдите карту с конца и выберите индексы с самыми большими элементами, пока сумма не станет меньше T . Сохраните необходимое количество элементов в переменной k .
    • Добавьте arr[i] к сумме и увеличьте A[i] в M на 1 .
    • Выведите значение k .

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

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

РЕКОМЕНДУЕМЫЕ СТАТЬИ