Count Number of Nice Subarrays LeetCode solution in Python

1
# Runtime: 628 ms (Top 69.2%) | Memory: 18.88 MB (Top 60.5%)
2

3

4
class Solution(object):
5
def numberOfSubarrays(self, nums, k):
6
"""
7
e.g. k = 2
8
nums = [2, 2, 1, 2, 1, 2, 2]
9
index= 0 1 2 3 4 5 6
10
2 even numbers to left of first 1
11
2 even numbers to right of last 1
12
total number of subarrays = pick between 0-2 numbers on left, then, pick between 0-2 numbers on right
13
i.e (left+1) (right+1)
14
Then slide window to next set of 2 odd numbers
15
"""
16

17
odds = []
18

19
for i in range(len(nums)):
20
if nums[i] & 1:
21
odds.append(i) #' Find index of all odd numbers '
22

23
odds = [-1] + odds + [len(nums)] #' Handle edge cases '
24
nice = 0
25

26
for i in range(1, len(odds) - k):
27
left = odds[i] - odds[i - 1] - 1 #' Number of 'left' even numbers '
28
right = (
29
odds[i + k] - odds[i + k - 1] - 1
30
) #' Number of 'right' even numbers '
31
nice += (left + 1) * (right + 1) #' Total sub-arrays in current window '
32

33
return nice

0

WPM •0 •0

100%

ACC •0 •0

0s

TIME •0