查找所有连续的子数组

问题描述

这里我有一个elementList,其中保存只有0和1的数据。我将数据从elementList扔到临时列表中,以检查所有子数组。 我试图找到仅包含一个'1'的连续子数组的总数。

我通过打印子数组检查了子数组是否正确。它们很好,但是我的subarrayCounter没有给出正确的值,并且我看不到我的问题(我确定有一个愚蠢的错误,对不起)。

任何想法都可以。谢谢

for i in range (0,len(elementlist)):
    maxwidth = len(elementlist)  - i 
    for j in range (0,maxwidth):
        tempList.append(elementlist[i+j])
   
        for m in range (0,len(tempList)) : 
            if tempList[m] == '1' : 
                counter += 1

        if counter == int(numberOne) : 
            subarrayCounter += 1
        counter = 0
    
        
            
    tempList.clear()

例如,当我在列表中有0 1 1 0 1时,如果尝试打印连续的子数组,它将给出正确的答案:

    for i in range (0,len(elementlist)):
        maxwidth = len(elementlist)  - i 
        for j in range (0,maxwidth):
            tempList.append(elementlist[i+j])
            print(tempList) # added print here
            for m in range (0,len(tempList)) : 
                if tempList[m] == '1' : 
                    counter += 1

            if counter == int(numberOne) : 
                subarrayCounter += 1
            counter = 0
    
        
            
        tempList.clear()

输出:

    ['0']
    ['0','1']
    ['0','1','0']
    ['0','0','1']
    ['1']
    ['1','1']
    ['1','0']
    ['1','1']
    ['0']
    ['0','1']
    ['1']

解决方法

我认为以下代码是解决此问题的简单方法。

def countSubArraysWithSingle1(elementlist):
  subarrayCounter = 0
  for i in range (0,len(elementlist)):
    for j in range (i,len(elementlist)):
      if elementlist[i:j+1].count('1') == 1:
        print(elementlist[i:j+1])
        subarrayCounter += 1
  print("Total count: ",subarrayCounter)

I / P :['0','1','1','0','1']
O / P:

['0','1']
['1']
['1']
['1','0']
['0','1']
['1']
Total count: 6

说明:
该代码按以下顺序找出所有子数组,并在每个子数组上运行一个count函数,该函数对其中的数字1进行计数并返回计数。我们检查返回的计数是否为1,如果为1,则将subarrayCounter递增1:

['0'].count('0') => 0
**['0','1'].count('1') => 1 {increment subarrayCounter by 1}**
['0','1','1'].count('1') => 2
['0','0'].count('1') => 2
['0','0','1'].count('1') = 3
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
['1','1'].count('1') => 2
['1','0'].count('1') => 2
['1','1'].count('1') => 3
**['1'].count('1') => 1 {increment subarrayCounter by 1}**
**['1','0'].count('1') => 1 {increment subarrayCounter by 1}**
['1','1'].count('1') => 2
['0'].count('1') => 0
**['0','1'].count('1') => 1 {increment subarrayCounter by 1}**
**['1'].count('1') => 1 {increment subarrayCounter by 1}**

希望有帮助!

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...