修改二进制序列

时间:2019-06-08 05:07:10

标签: algorithm combinatorics

我正在解决问题并陷入困境。它指出-我们有一个0和1的二进制序列。我们可以对该序列执行任意次数的操作:对于d为0的任何位,如果存在1(如果最初为1,则不存在修改)在前两位的至少一位(即位d-1和d-2)上,以及在后两位的至少一位(即位d + 1和d + 2)上,我们可以将其更改为1 。 但是,不可能修改前两位和后两位。

序列的权重是序列中1s的总数除以序列的长度。我们需要使该权重至少为0.75,目标是找到需要修改的最小位数,以使序列的权重至少为0.75 如果重量不能小于0.75,则打印-1

例如
给定序列:100110111
答案= 1
说明:我们可以将位3从0更改为1,这样序列将变为权重大于0.75的101110111

我的方法:
我首先找到了序列的初始权重,如果它小于0.75,则从位2到长度2遍历序列,对于每个位0,请检查条件 [{(d-1)= 1 OR(d-2)= 1}和{(d + 1)= 1 OR(d + 2)= 1}] 并重新计算每一步的重量,如果重量超过0.75,则打印答案。 但是这种方法给出了错误的答案。

1 个答案:

答案 0 :(得分:1)

这确实是两个问题。

  1. 要达到体重状态,必须将多少个0变成1?
  2. 有可能吗?

您可以通过扫描字符串并产生三个计数来解决这两个问题。多少个0会变成0? (x)那里有1个? (y)多少个0可以变成1? (z

如果y+z < 3*x,则答案为-1。

否则答案为max(0, ceil((x+y+z)*0.75) - y)