我正在解决问题并陷入困境。它指出-我们有一个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,则打印答案。
但是这种方法给出了错误的答案。
答案 0 :(得分:1)
这确实是两个问题。
您可以通过扫描字符串并产生三个计数来解决这两个问题。多少个0会变成0? (x
)那里有1个? (y
)多少个0可以变成1? (z
)
如果y+z < 3*x
,则答案为-1。
否则答案为max(0, ceil((x+y+z)*0.75) - y)
。