DDSA
Advertisement

1248. Count Number of Nice Subarrays

1248.cs
C#
public class Solution
{
    public int NumberOfSubarrays(int[] nums, int k)
    {
        return NumberOfSubarraysAtMost(nums, k) - NumberOfSubarraysAtMost(nums, k - 1);
    }

    private int NumberOfSubarraysAtMost(int[] nums, int k)
    {
        int ans = 0;

        for (int l = 0, r = 0; r <= nums.Length;)
            if (k >= 0)
            {
                ans += r - l;
                if (r == nums.Length)
                    break;
                if (nums[r] % 2 == 1)
                    --k;
                ++r;
            }
            else
            {
                if (nums[l] % 2 == 1)
                    ++k;
                ++l;
            }

        return ans;
    }
}
Advertisement
Was this solution helpful?