arrays - 获取最长连续的 1 序列

标签 arrays algorithm

我最近遇到了一个问题陈述它说:

Given an array of 0s and 1s, find the position of 0 to be 
replaced with 1 to get longest continuous sequence of 1s.

For example : Array- 1,1,0,0,1,0,1,1,1,0,1,1,1
Output - index 9

我尝试了一种蛮力方法,用 1 替换每个遇到的 0,在每次这样的替换之后,我计算了 1 的最大连续重复序列并每次更新它。

是否有更好的方法/算法来解决这个问题?

最佳答案

应该有一个一次性的解决方案。总体思路是数一数,然后将每个零的长度加起来。好吧,不是每个零,只是最后遇到的一个和最长的。

您需要跟踪两件事:

  • 迄今为止最长的链。
  • 前一个零值,以及前面零值的长度。

流程如下:

  1. 开始遍历字符串,直到遇到零。随时记录人数。

  2. 当你击中零时,记住零的位置以及前面 1 的数量。

  3. 将 1 数到下一个零。

  4. 回到之前的零,将新的“一”加到之前的“一”上。如果这比最长的链长,则替换最长的链。

  5. 记住这个零和前面的 1。

  6. 重复直到到达字符串的末尾。

  7. 然后在字符串的末尾,返回并将长度添加到前一个零,并在适当的情况下替换最长的链。

关于arrays - 获取最长连续的 1 序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27141416/

相关文章:

c - 字符数组的整数转换

python - Numpy:尝试在数组切片的切片上设置值

php - MySQL 返回行,其中列包含由数组定义的类别(并为结果添加权重)

arrays - 使用数组中左右索引给出的约束最大化权重总和

谁能解释和/或发布高级卡尔曼滤波器算法的 C 代码?

arrays - 防止重新计算命名范围中使用的用户定义函数

python - 在python中将两个不同长度的数组相乘

c++ - Yin algorithm(Pitch detection) - 差分函数的替代

c++ - 递归 3 X 3 幻方

Python:确定列表列表是否包含定义的序列