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

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

Учитывая массив arr[] размера N , задача состоит в том, чтобы вычислить минимальное количество элементов, которые нужно удалить из массива, чтобы сумма оставшихся элементов массива делилась на 3.

Примеры:

Input:  N = 3, arr[] = {1, 2, 3}
Output: 0
Explanation: 1+2+3 = 6 and it is already divisible by 3. 
So we need to remove 0 elements.

Input: N = 4, arr[] = {3, 6, 2, 2}
Output: 2
Explanation: 3+6+2+2 = 13. 
On removing last two elements, sum would become 9 which is divisible by 3. 
This is minimum number of elements to be removed.

Подход: Решение задачи основано на следующей математической идее:

  • If the sum is already divisible by 3, no deletions required.
  • If sum%3 = 1 then remove either 1 element (say x) such that x%3 = 1 or two elements (say x and y) such that (x%2 = y%2 = 2) because (2+2)%3 = 1.
  • If sum%2 = 2, then either remove an element (say x) so that x%3 = 2 or remove two elements (say x, y) such that (x%2 = y%2 = 1) because (1+1)%3 = 2 

Выполните следующие шаги, чтобы решить эту проблему:

  • Вычислите сумму всех элементов массива (скажем, sum ).
  • Пройдите массив от i = 0 до N-1 :
    • Если элемент делится на 3, увеличьте количество элементов, делящихся на 3.
    • Точно так же сохраните количество элементов, у которых остаток = 1 и 2 при делении на 3.
  • Теперь найдите минимальное количество удалений, требуемое из вышеупомянутых условий.

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

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