通过索引的距离更改数组的值(c)

时间:2018-02-16 13:30:27

标签: c arrays binary

我很难用这个: 我需要在C中编写一个接收二进制数组及其大小的函数,该函数应该计算并用每个1到最接近的0的距离(通过索引)替换当前值。 例如:如果函数接收到该数组{1,1,0,1,1,1,0,1},则该数组的新值应为{2,1,0,1,2,1,0,1}。众所周知,输入至少为零。

所以我想要的第一步是找到一对零(如果只有1,则只需1)并将它们设置为2个索引(z1z2)。然后我设置另一个索引i 每次检查哪个零最接近他(绝对值),然后iz1z2之间的差异将成为新值。

我有计划,但事情并没有按照我的计划进行。基本上我删除了代码(不管怎样都不好)所以我很感激任何帮助。谢谢!

1 个答案:

答案 0 :(得分:4)

此问题基于两件事

  • 保持数组left[i]从左到右与索引0的距离最近i

  • 保持数组right[i]与索引0之间距离最近i从右到左。

两者都可以在单循环迭代中计算。 O(n)

  • 然后,为每个位置获取left[i]right[i]的最小值。这将是1留在i位置的答案。

总的来说,时间复杂度为O(n)