Минимальные шаги для изменения arr[K] на 0 путем уменьшения arr[0] и многократного перехода к концу
Дан массив 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, прерывается.
- Перебрать диапазон [0, N), используя переменную i , и выполнить следующие задачи:
- После выполнения вышеуказанных шагов выведите значение времени в качестве ответа.
Ниже приведена реализация описанного выше подхода.
Временная сложность: O(N*X), где X — значение arr[K]
Вспомогательное пространство: O(1)