检查一个数组中的所有正值是否为连续的[关闭]。

问题描述 投票:-3回答:2

https:/www.geeksforgeeks.orgmaximum-consecutive-ones-or-zeros-in-a-binary-array 有谁知道如何修改这段代码,让它返回是否所有正值(1)都是连续的?

基本上,我不想让计数器告诉我最大的1连续数,我想返回是否绝对所有的都是连续的,所以在所有都是连续的情况下,答案将是真,否则将是假。

在这个例子中:arr = [1, 1, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1] 它将返回 假的 因为1之间有0,并不是所有的都是连续的BUT在这=arr=。[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1] 它将返回 真正 因为所有的1都是连续的。

我没有尝试任何东西,因为我不知道如何开始,也许用booleans的组合?我在用python工作,以防万一!

谢谢大家

python
2个回答
1
投票

这感觉像是一道作业题,所以我不会给你代码,但这里有一些伪代码。

这绝不是高效的,但很直观。

tracker = []arr = [0, 0, 0, 12, 12, 12, 11, 10]迭代每一个索引,跟踪这个数字出现了多少次。

  1. 如果该号码是前所未见的

    • 将该指数设置为1 即:tracker[index] = 1。
  2. 见过的

    • 递增跟踪器[index]1
    • 检查arr[index-1]是否等于arr[index]。
      • 如果没有,那么它就不是连续的。

1
投票

用numpy.NET可以很容易地做到这一点。 取连续元素之间的差值会让你在邻域相等的地方得到0,在邻域增加的地方得到+1(比如0右边的1),在邻域减少的地方得到负数。所以下面的方法也适用于0,1以外的数字。

import numpy as np
z=np.array([0,0,0,0,1,1,1,1,1,2,3])
all(np.diff(z)>=0)

Out[9]: True

z=np.array([0,0,0,0,1,1,1,1,1,2,1])
all(np.diff(z)>=0)

Out[11]: False
© www.soinside.com 2019 - 2024. All rights reserved.