Модификация двоичной последовательности - PullRequest
0 голосов
/ 08 июня 2019

Я решил проблему и застрял.Он гласит: «У нас есть двоичная последовательность 0 и 1. Мы можем выполнить эту операцию над последовательностью любое количество раз: для любого бита d, который равен 0, если существует 1 (если изначально есть 1, а не после»).изменение) по меньшей мере на одном из предыдущих двух битов, т.е. на битах d-1 и d-2, и на по меньшей мере на одном из следующих двух битов, т.е. на битах d + 1 и d + 2, мы можем изменить его на 1Однако невозможно изменить первые два бита и последние два бита.

Вес последовательности - это общее количество единиц в последовательности, деленное на длину последовательности.Нам нужно сделать этот вес не менее 0,75, и цель состоит в том, чтобы найти минимальное количество битов, которые необходимо изменить, чтобы вес последовательности был не менее 0,75. Если мы не можем сделать вес не менее 0,75, выведите -1

Например
Заданная последовательность: 100110111
Ответ = 1
Объяснение: Мы можем изменить бит 3 с 0 на 1, поэтому последовательность становится 101110111, вес которой больше 0,75

Мой подход:
Сначала я нашел начальный вес последовательности, и если он был меньше 0,75, то итерацию последовательности с позиции бита 2 до длины-2, и для каждого бита, имеющего 0, проверьте условие для [{(d-1) = 1 ИЛИ (d-2) = 1} И {(d + 1) = 1 ИЛИ (d + 2) = 1}] И пересчитывает вес на каждом шаге, и если вес превышает 0,75, то выведите ответ,Но такой подход дает неправильный ответ.

1 Ответ

1 голос
/ 08 июня 2019

Это действительно две проблемы.

  1. Сколько 0 должно стать 1, чтобы достичь веса?
  2. Возможно ли это?

Вы можете решить оба вопроса путем сканирования строки и произвести три счета.Сколько нулей будет равно 0?(x) Сколько здесь 1?(y) Сколько 0 может превратиться в 1?(z)

Если y+z < 3*x, то ответ -1.

В противном случае ответ max(0, ceil((x+y+z)*0.75) - y).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...