我最近遇到一个问题声明,上面说:
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的数字。
把1数到下一个0。
回到上一个零,在上一个“一”的基础上加上新的“一”。如果这比最长的链条长,则更换最长的链条。
记住这个零和前面的1。
重复,直到到达字符串的末尾。
然后在字符串的末尾,返回并将长度添加到前一个零,并在适当的情况下替换最长的链。