nums라는 배열과 다른 값 k가 있다고 가정합니다. 우리는 좋은 하위 배열의 수를 찾아야 합니다. k 개의 홀수가 있는 하위 배열은 좋은 하위 배열이라고 합니다.
따라서 입력이 nums =[1,1,2,1,1], k =3과 같으면 두 개의 하위 배열 [1,1,2,1]과 [1,2]가 있기 때문에 출력은 2가 됩니다. ,1,1].
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
odd_i :=새 목록
-
범위 0에서 숫자 - 1까지의 i에 대해 수행
-
nums[i] mod 2가 1과 같으면
-
odd_i의 끝에 i 삽입
-
-
-
시작 :=0, 종료 :=k - 1
-
나는 :=0
-
개수 :=0
-
동안 <홀수_i의 크기, 수행
-
끝이 odd_i - 1의 크기와 같으면
-
j :=숫자 크기 - 1
-
-
그렇지 않으면
-
j :=홀수_i[end + 1] - 1
-
-
개수 :=개수 +(홀수_i[시작] - i + 1) *(j - 홀수_i[끝] + 1)
-
나는 :=홀수_i[시작] + 1
-
시작 :=시작 + 1
-
끝 :=끝 + 1
-
-
반환 횟수
예시
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
def solve(nums, k):
odd_i = []
for i in range(len(nums)):
if nums[i] % 2 == 1:
odd_i.append(i)
start = 0
end = k - 1
i = 0
count = 0
while end < len(odd_i):
if end == len(odd_i) - 1:
j = len(nums) - 1
else:
j = odd_i[end + 1] - 1
count = count + (odd_i[start] - i + 1) * (j - odd_i[end] + 1)
i = odd_i[start] + 1
start = start + 1
end = end + 1
return count
nums = [1,1,2,1,1]
k = 3
print(solve(nums, k)) 입력
[1,2,3,4,5,6,7,8]
출력
2