Минимальные шаги для изменения arr[K] на 0 путем уменьшения arr[0] и многократного перехода к концу

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

Дан массив arr[] размера N и целое число, представляющее индекс K, задача состоит в том, чтобы найти минимальное количество операций, при которых arr[K] становится равным 0. За одну операцию значение первого элемента массива уменьшается на 1 . и идет в конец массива. Если в какой-то момент arr[i] становится равным 0, то он удаляется из массива, а операции выполняются над оставшимися элементами.

Примеры:

Input:  arr[] = {2, 3, 2}, K = 2
Output: 6
Explanation: For the first input,  
After iteration-1, the array changes to [1, 2, 1]. Steps taken = 3 steps
After iteration-2, the array changes to [0, 1, 0]. Steps taken = 3 steps
Hence, for the element at index 2, it took 6 steps to become 0.

Input:  arr[] = {5, 1, 1, 1}, K = 0
Output: 8

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

  • Инициализируйте переменную time как 0 , чтобы сохранить ответ.
  • Пройдите в цикле while до тех пор, пока значение arr[k] не будет равно 0 , и выполните следующие задачи:
    • Перебрать диапазон [0, N), используя переменную i , и выполнить следующие задачи:
      • Если arr[i] больше 0, то уменьшите значение arr[i] на 1, затем увеличьте значение времени на 1.
      • Если arr[k] становится равным 0, прерывается.
  • После выполнения вышеуказанных шагов выведите значение времени в качестве ответа.

Ниже приведена реализация описанного выше подхода.


Временная сложность: O(N*X), где X — значение arr[K]
Вспомогательное пространство: O(1)

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