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 :=나
- 네 :=나
- nums[i] <0이면
- 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
- nums[i]가 0과 같지 않고 s가 -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