题目
2{9FP9}YGQ}RN$MUS@}M{L.png
思路
- 自己的思路:利用滑动窗口的机制,移动窗口判断每一个子数组的总和是否大于等于k*threshold。
缺点:每一次都得求子数组的总和相加的过程,非常耗时。 - 来自大佬的思路:也是滑动窗口的方式,不过求子数组的总和就只需要减去第一个数,然后加上最后一个数。
代码
自己的垃圾代码
class Solution {
public int numOfSubarrays(int[] arr, int k, int threshold) {
int count = 0;
for(int i = k-1;i<=arr.length-1;i++){
int sum = 0;
for(int j = i-k+1; j<=i; j++){
sum+=arr[j];
}
if(sum>=k*threshold){
count++;
}
}
return count;
}
}
大佬思路产生的代码
class Solution {
public int numOfSubarrays(int[] arr, int k, int threshold) {
int count = 0;
int sum = 0;
for(int i = 0; i<k; i++){
sum +=arr[i];
}
if(sum>=k*threshold){
count++;
}
for(int i = k;i<=arr.length-1;i++){
sum=sum-arr[i-k]+arr[i];
if(sum>=k*threshold){
count++;
}
}
return count;
}
}