2020-06-05 1343. 大小为 K 且平均值大于等于阈值的子数组数目

题目

2{9FP9}YGQ}RN$MUS@}M{L.png

思路

  1. 自己的思路:利用滑动窗口的机制,移动窗口判断每一个子数组的总和是否大于等于k*threshold。
    缺点:每一次都得求子数组的总和相加的过程,非常耗时。
  2. 来自大佬的思路:也是滑动窗口的方式,不过求子数组的总和就只需要减去第一个数,然后加上最后一个数。

代码

自己的垃圾代码

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;
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。