算法通关村第16关【青铜】| 滑动窗口思想

1. 滑动窗口的基本思想

一句话概括就是两个快慢指针维护的一个会移动的区间

固定大小窗口:求哪个窗口元素最大、最小、平均值、和最大、和最小

可变大小窗口:求一个序列里最大、最小窗口是什么

2. 两个入门题

(1)子数组最大平均数

思路:每次窗口向右滑动一格,大小不变为k,遍历一次数组结果就出来了

java 复制代码
class Solution {
    public double findMaxAverage(int[] nums, int k) {
        int left = 0;
        int right = k-1;
        double sum = 0;
        for(int i = 0;i<k;i++){
            sum += nums[i];
        }
        double res = sum/k;
        while(right<nums.length-1){
            right++;
            left++;
            sum = sum - nums[left-1] + nums[right];
            if(sum/k>res){
                res = sum/k;
            }
        }
        return res;
    }
}

(2)最长连续递增序列

思路:窗口是递增的序列,当符合递增条件时窗口扩大,当不符合递增窗口重置为当前right位置,用一个变量来记录最长的递增子序列长度(窗口长度)

java 复制代码
class Solution {
    public int findLengthOfLCIS(int[] nums) {
        if(nums.length == 1){
            return 1;
        }
        int left = 0;
        int right = 0;
        int count = 1;
        int res = 1;
        while(right<nums.length-1){
            if(nums[right+1]>nums[right]){
                count++;
                right++;
            }else{
                res = res<count ? count : res;
                count = 1;
                right++;
                left = right;
            }
        }
        return count > res ? count : res;
    }
}
相关推荐
江畔柳前堤8 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore9 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考10 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX11 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面12 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号12 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论
月光船幽幽12 小时前
影子模式下保护 logits 不被修改
人工智能·python·算法
马拉AI12 小时前
腾讯开源 Agent 记忆系统,AI“换对话就忘”的问题有了新解法(附安装使用教程)
人工智能·算法·开源·科研
地平线开发者14 小时前
征程6工具链模型X86推理方式说明
算法
地平线开发者14 小时前
【征程6】校准量化中HistogramObserver解析
算法