Проверить, можно ли сделать Array строго возрастающим, сдвинув на 1 значение вправо

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

Учитывая массив arr[] из N положительных целых чисел, задача состоит в том, чтобы проверить, можно ли сделать массив строго возрастающим, сдвигая 1 значение к его правому элементу любое количество раз (т. е. для любого значения i уменьшать arr[i] и увеличить arr[i + 1] на 1 ).

Примечание. Целое число в любом индексе после любой операции не должно быть отрицательным.

Пример:

Input: arr[] = {4, 5, 4}
Output: Yes
Explanation: The array can be made strictly increasing by performing the following operations:

  • Choose i = 1 and shift value 1 from A1 to A2 . Now, arr[] = {3, 6, 4}.
  • Choose i = 2 and shift value 1 from A2 to A3 . Now, arr[] = {3, 5, 5}.
  • Choose i = 2 and shift value 1 from A2 to A3 . Now, arr[] = {3, 4, 6}.

Input: arr[] = {0, 1, 0}
Output: No

Подход: Данную задачу можно решить с помощью жадного подхода. Идея состоит в том, что для любого индекса i наименьшая возможная строго возрастающая последовательность без включения отрицательных целых чисел равна 0, 1, 2, 3, … . Следовательно, для каждого значения i в диапазоне [0, N) сумма целых чисел до arr[i] должна быть больше суммы ряда 0, 1, 2, …, i-1 , что эквивалентно ( я * (я – 1))/2 . Следовательно, если данный массив удовлетворяет этому условию, верните « Да », в противном случае верните « Нет ».

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

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

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