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

Python에서 양의 곱으로 하위 배열의 최대 길이를 찾는 프로그램

<시간/>

num이라는 배열이 있다고 가정하고 모든 요소의 곱이 양수인 하위 배열의 최대 길이를 찾아야 합니다. 양의 곱이 있는 하위 배열의 최대 길이를 찾아야 합니다.

따라서 입력이 nums =[2,-2,-4,5,-3]과 같으면 처음 4개의 요소가 곱이 양수인 하위 배열을 형성하기 때문에 출력은 4가 됩니다.

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

  • util() 함수를 정의합니다. s, e
  • 음수 :=0
  • ns :=-1, ne :=-1
  • s~e 범위의 i에 대해 다음을 수행합니다.
    • nums[i] <0이면
      • 음수 :=음수 + 1
      • ns가 -1과 같으면
        • ns :=나
      • 네 :=나
  • neg가 짝수이면
    • 반환 e-s+1
  • 그렇지 않으면
    • e-ns 및 ne-s의 최대값 반환
  • 메인 방법에서 다음을 수행하십시오. -
  • ans :=0
  • :=-1, e :=-1
  • 0에서 숫자 크기 범위의 i에 대해
    • nums[i]가 0과 같지 않고 s가 -1과 같으면
      • :=나
    • 그렇지 않고 nums[i]가 0과 같고 s가 -1과 같지 않으면
      • :=i-1
      • ans :=ans 및 util(s, e)의 최대값
      • :=-1, e :=-1
  • s가 -1과 같지 않고 e가 -1과 같으면
    • e :=숫자 크기 -1
    • ans :=ans 및 util(s, e)의 최대값
  • 반환

더 나은 이해를 위해 다음 구현을 살펴보겠습니다.

def util(s, e):
   neg = 0
   ns, ne = -1, -1
   for i in range(s, e+1):
      if nums[i]<0:
         neg += 1
         if ns == -1:
            ns = i
         ne = i

   if neg == 0 or neg %2 == 0:
      return e-s+1
   else:
      return max(e-ns, ne-s)

def solve(nums):
   ans = 0
   s, e = -1, -1

   for i in range(len(nums)):
      if nums[i]!=0 and s == -1:
         s = i
      elif nums[i]==0 and s != -1:
         e = i-1
         ans = max(ans, util(s, e))
         s = -1
         e = -1

   if s!= -1 and e == -1:
      e = len(nums)-1
      ans = max(ans, util(s, e))
      return ans

nums = [2,-2,-4,5,-3]
print(solve(nums))

입력

[2,-2,-4,5,-3]

출력

4