Минимизируйте свопы, чтобы переупорядочить массив таким образом, чтобы остаток любого элемента и его индекс с 3 были одинаковыми

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

Дан массив arr[] . Задача состоит в том, чтобы минимизировать количество требуемых свопов, чтобы для каждого i в arr[] было arr[i]%3 = i%3 . Если такая перестановка невозможна, выведите -1.

Примеры:

Input: arr[ ] = {4, 3, 5, 2, 9, 7}
Output: 3
Explanation: Following are the operations performed in arr[]
Initially, index % 3 = {0, 1, 2, 0, 1, 2} and arr[i] % 3 = {1, 0, 2, 2, 0, 1}.
swap arr[0] and arr[1] updates arr[] to arr[]  % 3 = {0, 1, 2, 2, 0, 1}
swap arr[3] and arr[4] updates arr[] to arr[] % 3 = {0, 1, 2, 0, 2, 1}
swap arr[4] and arr[5] updates arr[] to arr[] % 3 = {0, 1, 2, 0, 1, 2}
Therefore, 3 swaps are required to get the resultant array which is minimum possible. 

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

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

  • Перебрать массив с i от i = 0 до i=n-1
    • если arr[i] % 3 равно 0 , то продолжаем.
    • иначе найдите индекс j от i+1 до n-1 , где i % 3 = arr[j] % 3 и j % 3 = arr[i] % 3 .
    • С помощью вышеуказанного шага переместите два элемента массива в нужные позиции.
    • Если такого j не найдено, то найдите индекс k от i+1 до n-1 , где i % 3 = arr[k] % 3 , и поменяйте местами элементы.
    • Базовым случаем будет подсчет таких индексов, что index%3 = arr[i] % 3 .
  • Верните окончательный счет в качестве требуемого ответа.

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


Временная сложность: O(N 2 ), где N — размер arr[].

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