<p>Given an array of integers <code>arr</code> and two integers <code>k</code> and <code>threshold</code>, return <em>the number of sub-arrays of size </em><code>k</code><em> and average greater than or equal to </em><code>threshold</code>.</p>

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

<pre>
<strong>Input:</strong> arr = [2,2,2,2,5,5,5,8], k = 3, threshold = 4
<strong>Output:</strong> 3
<strong>Explanation:</strong> Sub-arrays [2,5,5],[5,5,5] and [5,5,8] have averages 4, 5 and 6 respectively. All other sub-arrays of size 3 have averages less than 4 (the threshold).
</pre>

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

<pre>
<strong>Input:</strong> arr = [11,13,17,23,29,31,7,5,2,3], k = 3, threshold = 5
<strong>Output:</strong> 6
<strong>Explanation:</strong> The first 6 sub-arrays of size 3 have averages greater than 5. Note that averages are not integers.
</pre>

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

<ul>
	<li><code>1 &lt;= arr.length &lt;= 10<sup>5</sup></code></li>
	<li><code>1 &lt;= arr[i] &lt;= 10<sup>4</sup></code></li>
	<li><code>1 &lt;= k &lt;= arr.length</code></li>
	<li><code>0 &lt;= threshold &lt;= 10<sup>4</sup></code></li>
</ul>

class Solution:
    def numOfSubarrays(self, arr: List[int], k: int, threshold: int) -> int:
        
        # number of sub-arrays of size k and average greater than or equal to threshold

        # how can I break this into sub problem

        # average = sum(subarray) / k 

        # is average >= threshold?

        # if true, res += 1

        res = 0

        # to avoid creating subarrays through indexing can't we just keep track of the sum throughout

        # and if the sum ever exceeds the threshold we increment our res by 1

        sum = 0

        L = 0

        for R in range(len(arr)):
            # print("START OF LOOP")
                    
            if (R - L + 1) > k:

                sum -= arr[L]
                # print("subtracted arr[L]:{} from sum because we reached capacity".format(arr[L]))

                L += 1

            curSize = (R - L + 1)

            
            sum += arr[R]

            average = (sum/k)

            # print("sum:{} and average:{} after adding current value".format(sum,average))

            # print("curSize:{} vs k:{}".format(curSize,k))

            if curSize == k and average >= threshold:
                # print("threshold met")
                # print("range L:{} R:{} has average:{}".format(L,R,(sum/k)))
                res += 1
                # print("res:{}".format(res))

            # print("END OF LOOP")
        
        return res
457