<p>Given an array of integers <code>nums</code> and an integer <code>k</code>. A continuous subarray is called <strong>nice</strong> if there are <code>k</code> odd numbers on it.</p>

<p>Return <em>the number of <strong>nice</strong> sub-arrays</em>.</p>

<p>&nbsp;</p>
<p><strong class="example">Example 1:</strong></p>

<pre>
<strong>Input:</strong> nums = [1,1,2,1,1], k = 3
<strong>Output:</strong> 2
<strong>Explanation:</strong> The only sub-arrays with 3 odd numbers are [1,1,2,1] and [1,2,1,1].
</pre>

<p><strong class="example">Example 2:</strong></p>

<pre>
<strong>Input:</strong> nums = [2,4,6], k = 1
<strong>Output:</strong> 0
<strong>Explanation:</strong> There are no odd numbers in the array.
</pre>

<p><strong class="example">Example 3:</strong></p>

<pre>
<strong>Input:</strong> nums = [2,2,2,1,2,2,1,2,2,2], k = 2
<strong>Output:</strong> 16
</pre>

<p>&nbsp;</p>
<p><strong>Constraints:</strong></p>

<ul>
	<li><code>1 &lt;= nums.length &lt;= 50000</code></li>
	<li><code>1 &lt;= nums[i] &lt;= 10^5</code></li>
	<li><code>1 &lt;= k &lt;= nums.length</code></li>
</ul>

class Solution:
    def numberOfSubarrays(self, nums: List[int], k: int) -> int:
        return self.sub_array(nums, k) - self.sub_array(nums, k - 1)

    def sub_array(self, nums, k):
        if k < 0:
            return 0
        i = j = count = sub_arr = 0
        prev_j = -1
        while j < len(nums):
            if prev_j != j:
                count += nums[j] % 2
            prev_j = j
            if count <= k:
                sub_arr += j - i + 1
                j += 1
            else:
                count -= nums[i] % 2
                i += 1
        return sub_arr


        """i = j = odd_count = sub_arr = 0
        odd = []
        while i < len(nums):
            if odd_count <= k and j < len(nums):
                if nums[j] % 2:
                    odd_count += 1
                    odd.append(j)
                j += 1
            else:
                if nums[i] % 2:
                    odd_count -= 1
                    if odd:
                        odd.pop(0)
                i += 1
            if odd_count == k:
                sub_arr += odd[0] - i + 1
            if j == len(nums) and odd_count <= k:
                break
        return sub_arr"""
23000