【发布时间】:2019-06-08 14:26:25
【问题描述】:
我正在解决一个问题并陷入困境。它指出 - 我们有一个 0 和 1 的二进制序列。我们可以对序列执行此操作任意次数:对于任何为 0 的位 d,如果存在 1(如果最初有 1,而不是之后修改)在前两位中的至少一位上,即位 d-1 和 d-2,以及在后两位中的至少一位上,即位 d+1 和 d+2,我们可以将其更改为 1 . 但是不能修改前两位和后两位。
序列的权重是序列中1的总数除以序列的长度。我们需要使这个权重至少为 0.75,目标是找到需要修改的最小位数以使序列的权重至少为 0.75 如果我们不能使权重至少为 0.75 print -1
例如
给定序列:100110111
答案 = 1
解释:我们可以把bit 3从0改为1,所以序列变成101110111,其权重大于0.75
我的方法:
我首先找到了序列的初始权重,如果它小于 0.75,则从位位置 2 到长度 2 遍历序列,并且对于具有 0 的每个位检查条件
[ {(d-1)=1 OR (d-2)=1} AND {(d+1)=1 OR (d+2)=1} ]
并在每一步重新计算权重,如果权重超过 0.75,则打印答案。
但是这种方法给出了错误的答案。
【问题讨论】: