假设我们有一个包含黑色和白色值的元素列表。是否有O(N)算法来查找包含黑色元素的最长序列?
我知道使用二进制搜索可以在O(Nlog(N))处进行。我想知道我们能否做得更好。
答案 0 :(得分:2)
您可以保留数组的第一个值及其索引。并分配maxCount和maxIndex来保持最长序列开始的位置。
Create oldValue and assign first value of array
Create maxCount variable
Create maxIndex variable (it should be 0 because we use first value of array)
Move on array - start with 2nd element (because we used first already)
if new value is equal old value
go to next element and increase count
else
check if count > maxCount
if so maxCount = count and maxIndex = i
else count = 0
and oldValue = currentValue
执行该操作,直到到达数组末尾。也是O(N)。我不编写任何代码,因为我相信您应该自己做。您尝试后可以问任何问题。
答案 1 :(得分:2)
我认为Kadane的算法会在可能的最佳时间为您提供解决方案。考虑包含您的“黑色”和“白色”的ListItems,因此对于一个实例,我们跟踪到目前为止已连续计数了多少个“黑色”项目,如果遇到“白色”,则将计数器重置为零,如果在在任何时候,我们的元素“黑色”或“白色”的计数都超过了全局最大计数,然后我们用局部计数更新了全局计数。
我已经用python编写了代码,非常欢迎评论和编辑。我是StackOverflow(和编码)的新手。
ListItems = ['Black', 'White', 'Black', 'Black', 'White', 'White', 'White', 'White','Black','Black','Black','Black', 'White', 'White','Black', 'White', 'White','Black','Black', 'White', 'White']
maxi = 0
max_so_far = 0
for i in ListItems:
if i =='Black':
maxi += 1
else:
maxi = 0
if maxi > max_so_far:
max_so_far = maxi
print(max_so_far)
答案 2 :(得分:-2)
我觉得我可能对这个问题有误解,但是:逐一浏览所有这些内容?