Найдите, удаляется ли 0 больше или 1, удаляя средний элемент, если последовательный триплет делится на 3 в данном двоичном массиве

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

Дан двоичный массив a[] размера N из 1 и 0 . Задача состоит в том, чтобы удалить элемент, если a[i-1]+a[i]+a[i+1] делится на 3 . Выведите 1 , если удалено больше единиц, чем 0 , иначе выведите 0 .

Примеры:

Input: a[] = { 1, 1, 1, 0, 1, 0, 0}
Output: 1
Explanation: Remove the second 1 from the left since that is the only ‘1’ for which (a[i]+a[i-1]+a[i+1]) %3==0. So print 1.

Input: a[] = { 1, 1}
Output: 0 
Explanation: No removal possible, so print 0.

Подход: Идея основана на наблюдении, что если оба соседа равны текущему элементу, потому что если (a[i]=a[i-1]=a[i+1]) , то сумма всегда будет делиться на 3 . Допустим, A хранит количество удаленных единиц, а B хранит количество удаленных нулей . Если i -й элемент равен соседям, то если a[i] =1 , увеличить A , иначе B . Если количество A больше, чем B , выведите 1 , иначе выведите 2=0 . Выполните следующие шаги, чтобы решить проблему:

  • Инициализируйте переменные A и B как 0 , чтобы сохранить количество удаленных 1 и 0 .
  • Переберите диапазон [0, N), используя переменную i , и выполните следующие шаги:
    • Если a[i-1], a[i] и a[i+1] равны, то если a[i] равно 1, то увеличьте значение A на 1 , иначе B на 1.
  • Если A больше B, то выведите 1 , иначе выведите 0.

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

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