每日算法刷题计划Day7 5.15:leetcode滑动窗口4道题,用时1h

news2025/5/17 3:30:35

一.定长滑动窗口

【套路】教你解决定长滑窗!适用于所有定长滑窗题目!

模版套路

1.题目描述

1.计算所有长度恰好为 k 的子串中,最多可以包含多少个元音字母
2.找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
3.返回长度为 k 且平均值大于等于 threshold 的子数组数目
4.构建并返回一个长度为 n 的数组 avgs ,其中 avgs[i] 是以下标 i 为中心的子数组的 半径为 k 的子数组平均值 。(长度为2*k+1,更新位置为i-k)

2.套路
三步走:入窗口-更新答案-出窗口

  • 1.入窗口:下标为i的元素进入窗口,更新相关统计量。如果i<k-1,则说明第一个窗口还未出现,重复步骤1.
  • 2.更新答案,一般是更新最大值/最小值
  • 3.出窗口,下标为i-k+1的元素离开窗口,更新相关统计量
    c++:
class Solution {
public:
    int maxVowels(string s, int k) {
        int res = 0, cnt = 0;
        for (int i = 0; i < s.size(); ++i) {
            // 1.入窗口
            if (s[i] == 'a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'o' ||
                s[i] == 'u') {
                // 更新统计量
                cnt++;
            }
            // 1. 第一个窗口未出现,重复步骤1
            if (i < k - 1) {
                continue;
            }
            // 2.更新答案
            res = max(res, cnt);
            // 3.出窗口
            if (s[i - k + 1] == 'a' || s[i - k + 1] == 'e' ||
                s[i - k + 1] == 'i' || s[i - k + 1] == 'o' ||
                s[i - k + 1] == 'u') {
                // 更新统计量
                cnt--;
            }
        }
        return res;
    }
};

python:

class Solution:
    def maxVowels(self, s: str, k: int) -> int:
        res, cnt = 0, 0
        for i in range(len(s)):
            # 1.入窗口
            if s[i] == "a" or s[i] == "e" or s[i] == "i" or s[i] == "o" or s[i] == "u":
                # 更新统计量
                cnt += 1
            # 1.第一个窗口未出现,重复步骤1
            if i < k - 1:
                continue
            # 2.更新答案
            res = max(res, cnt)
            # 3.出窗口
            if (
                s[i - k + 1] == "a"
                or s[i - k + 1] == "e"
                or s[i - k + 1] == "i"
                or s[i - k + 1] == "o"
                or s[i - k + 1] == "u"
            ):
                # 更新统计量
                cnt -= 1
        return res
1. 1456.定长子串中元音的最大数目(中等)

1456. 定长子串中元音的最大数目 - 力扣(LeetCode)
同模版套路

2. 643.子数组最大平均数I(简单)
思想

找出平均数最大且 长度为 k 的连续子数组,并输出该最大平均数。
同套路

代码

c++:

class Solution {
public:
    double findMaxAverage(vector<int>& nums, int k) {
        double res = -1e5;
        int sum = 0;
        for (int i = 0; i < nums.size(); ++i) {
            sum += nums[i];
            if (i < k - 1)
                continue;
            res = max(res, (double)sum / k);
            sum -= nums[i - k + 1];
        }
        return res;
    }
};

优化:
循环内只更新res为sum,最终返回结果除以k即可,因为是定长窗口

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

1343. 大小为 K 且平均值大于等于阈值的子数组数目 - 力扣(LeetCode)

思想

返回长度为 k 且平均值大于等于 threshold 的子数组数目。
同套路一样

代码

c++:

class Solution {
public:
    int numOfSubarrays(vector<int>& arr, int k, int threshold) {
        int res = 0, sum = 0;
        for (int i = 0; i < arr.size(); ++i) {
            sum += arr[i];
            if (i < k - 1)
                continue;
            if (sum >= k * threshold)
                res++;
            sum -= arr[i - k + 1];
        }
        return res;
    }
};
4. 2090.半径为k的子数组平均值(中等)

2090. 半径为 k 的子数组平均值 - 力扣(LeetCode)

思想

1.构建并返回一个长度为 n 的数组 avgs ,其中 avgs[i] 是以下标 i 为中心的子数组的 半径为 k 的子数组平均值 。
2.注意:长度为2*k+1,更新位置为i-k

代码

c++:

class Solution {
public:
    vector<int> getAverages(vector<int>& nums, int k) {
        int n = nums.size();
        vector<int> res(n);
        for (int i = 0; i < n; ++i)
            res[i] = -1;
        int len = 2 * k + 1; // 定义一个len
        long long sum = 0;
        for (int i = 0; i < n; ++i) {
            sum += (long long)nums[i];
            if (i < len - 1)
                continue;
            res[i - k] = (double)sum / len;
            sum -= (long long)nums[i - len + 1];
        }
        return res;
    }
};

注意:
sum记得开long long

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2377316.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 22.04搭建OpenStreeMap地址解析服务(保姆级教程)

1.数据准备 1.1.全球数据 下载地址&#xff1a;https://planet.openstreetmap.org/ 1.2.特定区域的数据 下载地址&#xff1a;Geofabrik Download Server 2.安装必要的软件包 2.1.更新系统软件包 sudo apt updatesudo apt upgrade 2.2.安装所需要的软件包 执行下面的命…

sqli—labs第五关——报错注入

一&#xff1a;判断输入类型 首先测试 ?id1 回显You are in... 渐进测试?id1 报错分析&#xff1a; 出现引号提示——“”&#xff0c;可能是字符型 继续测试?id1--&#xff08;用注释符修复了语法错误&#xff09; 回显You are in... 说明就是字符型 因为能用注释符…

从海洋生物找灵感:造个机器人RoboPteropod,它能在水下干啥?

大家好&#xff01;在如今人类对水下环境探索不断深入的时代&#xff0c;从水下考古到珊瑚礁考察&#xff0c;各种任务都离不开水下机器人的助力。但传统水下机器人尺寸较大&#xff0c;在狭窄的水下空间施展不开。今天&#xff0c;我们就来认识一款受海洋小生物启发而设计的仿…

FastAPI系列16:从API文档到TypeScript 前端客户端(SDKs)

从API文档到TypeScript 前端客户端&#xff08;SDKs&#xff09; 快速入门生成一个TypeScript 客户端测试生成的TypeScript 客户端 API标签与客户端生成生成带有标签的 TypeScript 客户端 自定义Operation ID使用自定义Operation ID生成TypeScript客户端 在 FastAPI系列15&…

CS016-2-unity ecs

目录 【23】射击改进 【24】僵尸生成器 ​编辑【25】随机行走 【27】射击光效 【23】射击改进 a. 当距离目标太远的时候&#xff0c;要继续移动。而当距离目标到达攻击距离之后&#xff0c;则停止移动。 上图中的if&#xff1a;判断自身和目标的距离是否大于攻击距离&#…

CST软件对OPERACST软件联合仿真汽车无线充电站对人体的影响

上海又收紧了新能源车的免费上牌政策。所以年前一些伙伴和我探讨过买新能源汽车的问题&#xff0c;小伙伴们基本纠结的点是买插电还是纯电&#xff1f;我个人是很抗拒新能源车的&#xff0c;也开过坐过。个人有几个观点&#xff1a; 溢价过高&#xff0c;不保值。实际并不环保…

华为2024年报:鸿蒙生态正在取得历史性突破

华为于2025年03月31日发布2024年年度报告。报告显示&#xff0c;华为经营结果符合预期&#xff0c;实现全球销售收入 8,621 亿元人民币&#xff0c;净利润 626 亿元人民币。2024 年研发投入达到 1,797 亿元人民币&#xff0c;约占全年收入的 20.8%&#xff0c;近十年累计投入的…

LabVIEW的CAN通讯测试程序

该程序是基于 NI LabVIEW 平台开发的 CAN&#xff08;Controller Area Network&#xff0c;控制器局域网&#xff09;通讯测试程序。主要功能是对 CAN 通讯过程进行模拟、数据传输与验证&#xff0c;确保 CAN 通讯的正常运行和数据的准确传输。 程序详细说明 接口选择&#xff…

Spring Boot 使用Itext绘制并导出PDF

最终效果 其实可以加分页&#xff0c;但是没有那么精细的需求&#xff0c;所以我最后就没有加&#xff0c;有兴趣的可以尝试下。 项目依赖 <!-- Spring Boot 版本有点老 --> <spring-boot.version>2.3.12.RELEASE</spring-boot.version><!-- 依…

【测试】BUG

目录 1、描述BUG的要素&#xff1a; 2、BUG的级别 3、BUG的状态的流转 4、与开发产⽣争执怎么办&#xff08;⾼频考题&#xff09; 什么是BUG&#xff1f;&#xff1f;&#xff1f; 程序与规格说明之间的不匹配才是错误 1、描述BUG的要素&#xff1a; 问题出现的版本、问…

Mac 环境下 JDK 版本切换全指南

概要 在 macOS 上安装了多个 JDK 后&#xff0c;可以通过系统自带的 /usr/libexec/java_home 工具来查询并切换不同版本的 Java。只需在终端中执行 /usr/libexec/java_home -V 列出所有已安装的 JDK&#xff0c;然后将你想使用的版本路径赋值给环境变量 JAVA_HOME&#xff0c;…

Pillow 移除或更改了 FreeTypeFont.getsize() 方法

w, h self.font.getsize(label) # text width, height AttributeError: FreeTypeFont object has no attribute getsize 在Pillow 项目的变更日志里可以查到哪个版本移除了 getsize() 方法&#xff0c;Pillow仓库&#xff1a; Releases python-pillow/Pillow GitHub 因为…

视频编辑软件无限音频、视频、图文轨

威力导演APP的特色功能包括无限音频、视频、图文轨&#xff0c;以及上百种二/三维特技转场、音/视频滤镜和多种音视频混编输出。此外&#xff0c;它还支持实时高清HDV格式、模拟信号输出&#xff0c;并具有DV25、DVACM、DV、HDV输入和输出等功能。在视频编辑领域&#xff0c;威…

uniapp-商城-53-后台 商家信息(更新修改和深浅copy)

1、概述 文章主要讨论了在数据库管理中如何处理用户上传和修改商家信息的问题&#xff0c;特别是通过深浅拷贝技术来确保数据更新的准确性和安全性。 首先&#xff0c;解释了深拷贝和浅拷贝的区别&#xff1a;浅拷贝使得两个变量共享相同的内存地址&#xff0c;而深拷贝则创建新…

[Java实战]Spring Boot 整合 Thymeleaf (十)

[Java实战]Spring Boot 整合 Thymeleaf &#xff08;十&#xff09; 引言 在 Java Web 开发领域&#xff0c;Thymeleaf 以其自然模板、无缝 Spring 集成和强大的表达式引擎脱颖而出&#xff0c;成为 Spring Boot 官方推荐的模板引擎。本文将深度解析 Spring Boot 与 Thymelea…

监控易一体化运维:网络流量分析的智慧引擎

在数字化时代&#xff0c;企业运营与网络紧密相连&#xff0c;网络性能的优劣直接影响企业的发展步伐。网络流量管理在企业网络运维中占据非常关键的地位。监控易一体化运维管理软件&#xff0c;凭借其强大的网络流量分析功能&#xff0c;为企业网络的稳定高效运行提供了有力保…

IDEA+git将分支合并到主分支、IDEA合并分支

文章目录 一、合并分支二、可能遇到的问题2.1、代码冲突 开发过程中我们可能在开发分支(dev)中进行开发&#xff0c;等上线后将代码合并到主分支(master)中&#xff0c;本文讲解如何在IDEA中将dev分支的代码合并到master分支中。 一、合并分支 功能说明&#xff1a;将dev分支的…

uniapp+vue3中自动导入ref等依赖

前言&#xff1a; 在我们使用uni-appvue3创建项目&#xff0c;开发的过程中&#xff0c;老是需要导入我们的ref、onshow等&#xff0c;那么能不能自动导入&#xff0c;不用我们每个页面都写呢&#xff1f;是没问题的&#xff0c;这里让他的小帮手来帮你减轻负担&#xff1a;他就…

【.net core】.net core 6.0添加WCF服务引用

在 .NET Core 6.0 (.NET 6) 中&#xff0c;调用 WCF 服务 是完全支持的&#xff0c;只要服务使用的是 basicHttpBinding 或类似 HTTP 协议的绑定&#xff08;如 wsHttpBinding&#xff0c;但不推荐&#xff09; .NET Core不支持 net.tcp,只能用http形式。 .net core调用WCF服务…

小结: js 在浏览器执行原理

浏览器多进程与多线程 现代浏览器的标签环境隔离主要通过多进程架构和多线程机制实现&#xff0c;以确保安全、性能和稳定性。以下是浏览器实现标签环境隔离的多进程和多线程交互架构的详细解析&#xff1a; ------------------- ------------------- -----------…