滑动窗口

什么是滑动窗口

滑动窗口是一种常用的技术,主要用于处理连续数据序列(如数组、字符串或时间序列数据),通过动态调整一个固定大小的“窗口”来高效地解决问题。窗口在序列上“滑动”,每次移动一个位置,从而避免重复计算,优化时间和空间复杂度。该技术在算法设计、网络通信、数据分析等领域有广泛应用。

示例

我们通过一道题来学习滑动窗口
题目
首先我们阅读题目,思考三个部分内容

  • 已知条件
  • 求什么
  • 关键字
    已知条件为n个元素大小的数组,和一个整数k
    求平均数
    关键字: 平均数最大,长度为k,连续子数组
    这里,长度为k就是窗口大小为k,我们以第一个例子[1,12,-5,-6,50,3] k = 4为例子

步骤

  • 确定窗口大小
  • 确定窗口的起点,终点
  • 确定元素进入,离开窗口时的状态
  • 更新窗口的状态
  • 得到答案
    这道题中大小为k,起点为0,终点为数组大小,元素进入和离开窗口时都是不变的,那么这里最关键的一步就是怎么更新窗口的状态我们来详细讲解
  • 看我们需要什么
  • 在窗口中能得到什么
  • 什么时候更新窗口的元素
  • 怎么更新窗口的元素
    由题意不难得知我们需要窗口中元素的和(k固定,得到和就得到平均数)
    我们能在窗口中得到每个元素的值
    当我们计算完和之后就可以更新窗口的值
    由题意由于是定长k,并且求k这个窗口中sum的最大值,我们不难发现只需要每次让窗口向前移动一位就行
    那么这道题的思考就完成了,下面看图解
    图解
    这里0 - 4是第一个窗口,我们可以得到0 - 4这个窗口的和为2,平均值为0.5
    这时我们移动窗口,让窗口到1 - 5这时和为51,以此类推,到了最后到达2,6后此时窗口的尾指针到达数组边界,此时滑动窗口结束

代码

 pub fn find_max_average(nums: Vec<i32>, k: i32) -> f64 {//计算第一次平均值let avg_and_sum = Self::average(&nums, 0, k);let mut avg = avg_and_sum.0;let mut sum = avg_and_sum.1;let mut res = avg;for i in 1..nums.len() {if i + k as usize > nums.len() {break;}sum -= nums[i - 1];sum += nums[i + k  as usize -1];avg = sum as f64 / k as f64;if res < avg {res = avg;}}res}fn average(nums: &Vec<i32>, start: i32, end: i32) -> (f64, i32) {let mut sum = 0.0;for i in start..end {sum += nums[i as usize] as f64;}(sum / (end - start) as f64, sum as i32)}

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Rust学习笔记(三)|所有权机制 Ownership

本篇文章包含的内容1 重新从堆和栈开始考虑2 所有权规则3 变量和数据&#xff08;值&#xff09;的交互方式3.1 移动 Move3.2 克隆 Clone3.3 复制 Copy4 函数与所有权4.1 参数传递时的所有权转移4.2 函数返回时的所有权转移5 引用和借用6 切片前面两篇仅仅介绍了一些Rust的语法…

Redis 知识点与应用场景

1. Redis 简介与核心特性Redis&#xff08;Remote Dictionary Server&#xff09;是一款开源的内存数据存储系统&#xff0c;支持多种数据结构&#xff0c;兼具高性能、持久化、分布式等特性&#xff0c;广泛用于缓存、数据库、消息中间件等场景。其核心特性包括&#xff1a;高…

日常反思总结

1.group by和order by的区别

易贝 (eBay (eBay) 关键字搜索 API 实战:从认证到商品列表获取全流程解析

在跨境电商开发领域&#xff0c;eBay 作为全球最大的在线交易平台之一&#xff0c;其开放 API 为开发者提供了丰富的商品数据获取能力。本文将聚焦 eBay 关键字搜索商品列表接口的实现&#xff0c;涵盖 OAuth2.0 认证、高级搜索参数配置、分页策略及完整代码实现&#xff0c;帮…

敏捷数据开发实践:基于 Amazon Q Developer + Remote MCP 构建本地与云端 Amazon Redshift 交互体系

敏捷数据开发实践&#xff1a;基于 Amazon Q Developer Remote MCP 构建本地与云端 Amazon Redshift 交互体系 新用户可获得高达 200 美元的服务抵扣金 亚马逊云科技新用户可以免费使用亚马逊云科技免费套餐&#xff08;Amazon Free Tier&#xff09;。注册即可获得 100 美元的…

【SpringBoot】11 概念理解 - 深入理解 Java 和 Spring 中的容器、组件、类、对象与 Bean

文章目录引言1. 基本概念解析1.1 类&#xff08;Class&#xff09;1.2 对象&#xff08;Object&#xff09;1.3 组件&#xff08;Component&#xff09;1.4 Bean 实例&#xff08;Bean Instance&#xff09;1.5 容器&#xff08;Container&#xff09;2. 运行时 vs. 非运行时的…

【学习嵌入式day-25-线程】

exec函数族exec函数族利用进程空间执行另一份代码#include "../head.h"int main(void) {char *parg[5] {"./hello","how","are","you",NULL,};printf("execl-up\n");//execl("./hello", "./hello…

Rust 中 Box 的深度解析:作用、原理与最佳实践

Rust 中 Box 的深度解析&#xff1a;作用、原理与最佳实践 Box 是 Rust 中最基础且最重要的智能指针类型&#xff0c;它在 Rust 的内存管理和所有权系统中扮演着核心角色。以下是关于 Box 的全面解析&#xff1a; Box 的核心作用 #mermaid-svg-m6liFZlmqOHRfIZB {font-family:&…

【测试用例】

需求背景部分金融/政企等行业客户&#xff0c;企业内部安全要求较高&#xff0c;且因为某些原因未接入 sso 登录&#xff0c;会要求 MG 提供较为复杂的密码规则甚至提供强更机制&#xff1b;且每个客户的安全要求不一样目前 MG 线上密码规则&#xff1a; 8 位以上&#xff0c;包…

Klipper-probe模块

配置信息[probe] pin: !PD4 x_offset: 0 y_offset: 0 z_offset: -0.20 #the distance between nozzle and level switch speed: 10 samples: 2 #probe one point three times get an average samples_result: average sample_retract_dist: 5 samples_tolerance: 0.05 # …

Excel多级数据结构导入导出工具

Excel多级数据结构导入导出工具 这是一个功能强大的Excel导入导出工具库&#xff0c;专门用于处理复杂的多级嵌套数据结构。通过自定义注解配置&#xff0c;可以轻松实现Java对象与Excel文件之间的双向转换。 核心功能特性 1. 多级数据结构支持 嵌套对象处理: 支持任意层级的对…

基于UniApp的新大陆物联网平台温湿度检测系统开发方案

新大陆物联网平台对接要点 认证方式&#xff1a; 使用AccessToken进行API认证 Token存储在本地缓存中 数据格式&#xff1a; 温度数据单位&#xff1a;摄氏度(C) 湿度数据单位&#xff1a;百分比(%) 时间格式&#xff1a;ISO 8601或时间戳 设备状态&#xff1a; online:…

Git、JSON、MQTT

GIT简介&#xff1a;Git是什么&#xff1f;Git是目前世界上最先进的分布式版本控制系统作用&#xff1a;版本控制&#xff08;版本的备份--->版本的回溯和前进&#xff09;多人协作优势&#xff1a;SVN(集中式)劣势&#xff1a;过度依赖服务器和网络&#xff0c;容灾性差Git…

yolo目标检测技术之yolov11项目实战(三)

yolo目标检测技术之yolov11项目实战&#xff08;三&#xff09; 文章目录yolo目标检测技术之yolov11项目实战&#xff08;三&#xff09;一、 基于 YOLO11 的火焰与烟雾检测系统&#xff08;实战代码&#xff09;项目目标环境搭建创建虚拟环境安装依赖1.1 数据集准备1. 下载地址…

CF思维小训练(二)

清晰的缤纷的都可以 脏兮兮的甜的也都有转机 不想太小心 错过第一百零一场美丽 CF思维小训练&#xff08;二&#xff09; 书接上回CF思维小训练-CSDN博客 虽然代码很短&#xff0c;都是每一道题的背后都思维满满&#xff1b; 目录CF思维小训练&#xff08;二&#xff09;Arbo…

分布式锁:从理论到实战的深度指南

1. 分布式锁是啥&#xff1f;为什么它比单机锁更“硬核”&#xff1f;分布式锁&#xff0c;听起来高大上&#xff0c;其实核心问题很简单&#xff1a;在多个机器、进程或服务同时抢夺资源时&#xff0c;怎么保证不打架&#xff1f; 想象一下&#xff0c;你在双十一抢购限量款球…

基于UniApp的智能在线客服系统前端设计与实现

了解更多&#xff0c;搜索“程序员老狼”一、引言在当今数字化时代&#xff0c;客户服务已成为企业竞争力的重要组成部分。本文将详细介绍一款基于UniApp框架开发的跨平台智能客服系统前端实现方案&#xff0c;该系统不仅具备传统客服功能&#xff0c;还融入了现代即时通讯和人…

react与vue的对比,来实现标签内部类似v-for循环,v-if等功能

前言&#xff1a;在vue中我们提供了很多标签方法&#xff0c;比如用的比较多的v-for循环内容&#xff0c;v-if/v-show等判断&#xff0c;可以直接写在标签中&#xff0c;大大提高了我们的开发效率&#xff0c;那么在react中有没有类似的方法呢&#xff1f;我们这里来说一说。re…

PCB工艺-四层板制作流程(简单了解下)

一&#xff09;流程&#xff1a;四层板的内层芯板&#xff0c;是由一张双面覆铜板PP*2铜箔*2覆铜板蚀刻好线路&#xff0c;就是我们的芯板了PP全名叫半固化片&#xff0c;主体是玻璃纤维布环氧树脂&#xff0c;是绝缘介质铜箔片&#xff0c;是单独一张铜箔&#xff0c;很薄&…

无人机三维路径规划

文章目录 1、引言 2、背景知识 3、核心算法 4、挑战与优化 5、初始效果 6、需要改进地方 7、水平方向优化路线 8、垂直方向优化路线 9、与经过路线相交的网格都绘制出来 1、引言 介绍三维路径规划的定义和重要性:在无人机、机器人导航、虚拟现实等领域的应用。 概述文章目标和…