Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python을 사용하여 하나의 요소를 삭제한 후 1의 가장 긴 하위 배열을 찾는 프로그램

<시간/>

num이라는 이진 배열이 있다고 가정하고 이 배열에서 하나의 요소를 삭제할 수 있습니다. 결과 배열에서 1만 포함하는 비어 있지 않은 가장 긴 하위 배열의 크기를 찾아야 합니다. 그러한 하위 배열이 없으면 0을 반환합니다.

따라서 입력이 nums =[1,0,1,1,1,0,1,1,0]과 같으면 위치 5에서 0을 제거하면 하위 배열 [1]을 얻을 수 있기 때문에 출력은 5가 됩니다. ,1,1,1,1] 5개의 1이 있습니다.

이 문제를 해결하기 위해 다음 단계를 따릅니다. −

  • 0이 숫자가 아니면

    • 숫자의 크기를 반환 - 1

  • 1이 숫자가 아닌 경우

    • 0 반환

  • a :=새 목록

  • cnt :=0

  • 숫자로 된 각 i에 대해 수행

    • i가 0과 같으면

      • cnt가 0과 같지 않으면

        • 끝에 cnt 삽입
        • cnt :=0

      • 끝에 i 삽입
      • 그렇지 않으면

        • cnt :=cnt + 1

  • cnt가 0과 같지 않으면

    • 끝에 cnt 삽입
  • 최대 :=0

  • 범위 0에서 크기까지의 i에 대해

    • a[i]가 0과 같지 않으면

      • 다음 반복으로 이동

    • a[i]가 0과 같고 i가 a - 1의 크기와 같으면

      • Max :=Max 및 a[i-1]의 최대값

    • 그렇지 않으면 a[i]가 0과 같고 i가 0과 같을 때

      • Max :=Max 및 a[i+1]의 최대값

    • 그렇지 않으면 a[i]가 0과 같을 때

      • 최대 :=최대 최대값 및 (a[i+1]+a[i-1])

  • 최대 반환

def solve(nums):
   if 0 not in nums:
      return len(nums)-1
   if 1 not in nums:
      return 0
      a = []
      cnt = 0
      for i in nums:
         if i == 0:
            if cnt != 0:
               a.append(cnt)
               cnt = 0
            a.append(i)
         else:
            cnt += 1
      if cnt!=0:
         a.append(cnt)
      Max = 0
      for i in range(len(a)):
         if a[i] != 0:
            continue
         if a[i] == 0 and i == len(a)-1:
            Max = max(Max,a[i-1])
         elif a[i] == 0 and i == 0:
            Max = max(Max,a[i+1])
         elif a[i] == 0:
            Max = max(Max,a[i+1]+a[i-1])
   return Max
nums = [1,0,1,1,1,0,1,1,0]
print(solve(nums))

입력

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

출력

5