Программа Javascript для подсчета оборотов, необходимых для сортировки заданного массива в порядке невозрастания

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

Дан массив arr[] , состоящий из N целых чисел. Задача состоит в том, чтобы отсортировать массив в порядке невозрастания по минимальному количеству поворотов против часовой стрелки. Если отсортировать массив невозможно, то выведите «-1» . В противном случае выведите количество оборотов.

Примеры:

Input: arr[] = {2, 1, 5, 4, 3}
Output: 2
Explanation: Two anti-clockwise rotations are required to sort the array in decreasing order, i.e. {5, 4, 3, 2, 1}

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

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

  • Сохраните количество arr[i + 1] > arr[i] в переменной, а также сохраните индекс, когда arr[i+1] > arr[i] .
  • Если значение count равно N – 1 , то массив сортируется в неубывающем порядке. Требуемых шагов точно (N – 1) .
  • Если значение count равно 0 , то массив уже отсортирован в невозрастающем порядке.
  • Если значение count равно 1 и arr[0] ≤ arr[N – 1] , то требуемое количество оборотов равно (index + 1) , путем выполнения сдвига всех чисел до этого индекса. Кроме того, проверьте, если arr[0] ≤ arr[N – 1] , чтобы убедиться, что последовательность не возрастает.
  • В противном случае невозможно отсортировать массив по невозрастанию.

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

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

Пожалуйста, обратитесь к полной статье о Count вращениях, необходимых для сортировки данного массива в невозрастающем порядке для получения более подробной информации!