我很难用这个:
我需要在C中编写一个接收二进制数组及其大小的函数,该函数应该计算并用每个1到最接近的0的距离(通过索引)替换当前值。
例如:如果函数接收到该数组{1,1,0,1,1,1,0,1}
,则该数组的新值应为{2,1,0,1,2,1,0,1}
。众所周知,输入至少为零。
所以我想要的第一步是找到一对零(如果只有1,则只需1)并将它们设置为2个索引(z1
,z2
)。然后我设置另一个索引i
每次检查哪个零最接近他(绝对值),然后i
和z1
或z2
之间的差异将成为新值。
我有计划,但事情并没有按照我的计划进行。基本上我删除了代码(不管怎样都不好)所以我很感激任何帮助。谢谢!
答案 0 :(得分:4)
此问题基于两件事
保持数组left[i]
从左到右与索引0
的距离最近i
。
保持数组right[i]
与索引0
之间距离最近i
从右到左。
两者都可以在单循环迭代中计算。 O(n)
。
left[i]
和right[i]
的最小值。这将是1
留在i
位置的答案。总的来说,时间复杂度为O(n)
。