1343. Number of Sub-arrays of Size K and Average Greater than or Equal to Threshold
SourceBiweekly Contest 19 Q2DifficultyMediumRating1317
Description
Given an array of integers arr and two integers k and threshold, return the number of sub-arrays of size k and average greater than or equal to threshold.
Example 1:
Input: arr = [2,2,2,2,5,5,5,8], k = 3, threshold = 4 Output: 3 Explanation: 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).
Example 2:
Input: arr = [11,13,17,23,29,31,7,5,2,3], k = 3, threshold = 5 Output: 6 Explanation: The first 6 sub-arrays of size 3 have averages greater than 5. Note that averages are not integers.
Constraints:
1 <= arr.length <= 1051 <= arr[i] <= 1041 <= k <= arr.length0 <= threshold <= 104
Solutions
Solution 1: Sliding Window
Thinking
Count windows of length \(k\) whose average is at least \(\textit{threshold}\). \(n \le 10^5\) forbids rebuilding each window. The average test is the sum versus \(k \times \textit{threshold}\). A sliding sum of width \(k\) updates in \(O(1)\) and counts qualifying windows in one pass.
We can multiply \(\textit{threshold}\) by \(k\), so that we can directly compare the sum within the window with \(\textit{threshold}\).
We maintain a sliding window of length \(k\), and for each window, we calculate the sum \(s\). If \(s\) is greater than or equal to \(\textit{threshold}\), we increment the answer.
The time complexity is \(O(n)\), and the space complexity is \(O(1)\), where \(n\) is the length of the array \(\textit{arr}\).
1 2 3 4 5 6 7 8 9 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | |
1 2 3 4 5 6 7 8 9 10 | |