[算法练习]第三天:定长滑动窗口

643. 子数组最大平均数 I

切记,这里的三段式

右指针入队列-》判断-》左指针出队列以备下一次判断

因为这里只需要最后返回平均值,所以只需要最后进行强制类型转换为double即可,不需要提前把变量设置为double

cpp 复制代码
class Solution {
public:
    double findMaxAverage(vector<int>& nums, int k) {
        int ans = INT_MIN;
        int temp = 0;
        for(int right = 0; right < nums.size(); right++){
            // 右指针
            temp += nums[right];
            //判断
            int left = right - k + 1;
            if(left < 0) continue;
            ans = max(ans,temp);
            //左指针出队列,以备下一次入队列
            temp -= nums[left];
        }
        return (double)ans/k;
    }
};

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

思路一点没变

cpp 复制代码
class Solution {
public:
    int numOfSubarrays(vector<int>& arr, int k, int threshold) {
        int ans = 0;
        int temp = 0;
        for(int right = 0;right < arr.size();right++){
            temp += arr[right];

            int left = right - k + 1;
            if(left < 0) continue;
            if(temp >= threshold*k) ans++;

            temp -= arr[left];
        }
        return ans;
    }
};

2090. 半径为 k 的子数组平均值

思路很像,几乎没什么区别,这里注意示例元素和可能会超过int,要用long long;数组初始化使用-1会方便很多;

cpp 复制代码
class Solution {
public:
    vector<int> getAverages(vector<int>& nums, int k) {
        vector<int>ans(nums.size(),-1);
        long long temp = 0;
        for(int right = 0;right < nums.size();right++){
            temp += nums[right];
            
            int left = right - 2*k ;
            if(left < 0) continue;
            //判断
            ans[(left+right)/2] = temp/(2*k+1);

            temp -= nums[left];
        }
        return ans;
    }
};
相关推荐
地平线开发者4 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮5 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者5 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考5 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
HXhlx9 小时前
CART决策树基本原理
算法·机器学习
Wect9 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱10 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
Gorway16 小时前
解析残差网络 (ResNet)
算法
拖拉斯旋风17 小时前
LeetCode 经典算法题解析:优先队列与广度优先搜索的巧妙应用
算法
Wect17 小时前
LeetCode 207. 课程表:两种解法(BFS+DFS)详细解析
前端·算法·typescript