滑动窗口思想

今天刷随想录,接下来就开始介绍数组操作中另一个重要的方法:滑动窗口

滑动窗口算法简介

滑动窗口算法是一种通过定义窗口在数据结构上的滑动,以解决问题的方法。通常,窗口由两个指针表示,一个用于维护窗口的起始位置,另一个用于维护窗口的结束位置。算法的核心思想是在遍历过程中,通过移动这两个指针,调整窗口的大小和位置,以满足特定的条件。

算法步骤

  1. 初始化指针: 设立两个指针,通常表示窗口的起始位置(start)和结束位置(end)。

  2. 遍历数组: 从数组的第一个元素开始,进行遍历。

  3. 窗口调整: 在遍历过程中,根据问题的具体条件,通过移动指针调整窗口的大小和位置。

  4. 更新最优解: 在每一步调整中,更新记录当前问题的最优解。

  5. 返回结果: 遍历完成后,返回记录的最优解。

案例应用:果树农场水果收集

考虑一个实际问题:在一排果树上收集水果,每个篮子只能装同一类型的水果。我们希望找到一种策略,使得能够收集到的水果数量最大。

具体步骤
  1. 初始化: 设立两个指针start和end,初始位置都为数组的第一个元素。

  2. 遍历果树数组: 在遍历的过程中,使用一个字典或数组来记录窗口内每种水果的数量。

  3. 窗口调整: 如果窗口内水果种类的数量大于2,移动start指针,缩小窗口,直到水果种类数量等于2。

  4. 更新最大窗口: 在每一步调整中,更新记录的最大窗口大小。

  5. 返回结果: 遍历完成后,最大窗口的大小即为能够收集到的最大水果数量。

代码实现

#include <iostream>
#include <unordered_map>
#include <vector>using namespace std;int maxFruits(vector<int>& fruits) {int start = 0, end = 0;unordered_map<int, int> fruitCount;int maxWindowSize = 0;while (end < fruits.size()) {// 更新窗口fruitCount[fruits[end]]++;// 窗口调整while (fruitCount.size() > 2) {fruitCount[fruits[start]]--;if (fruitCount[fruits[start]] == 0) {fruitCount.erase(fruits[start]);}start++;}// 更新最大窗口maxWindowSize = max(maxWindowSize, end - start + 1);// 移动窗口end++;}return maxWindowSize;
}int main() {// 示例用法vector<int> fruits = {1, 2, 1, 2, 3};int result = maxFruits(fruits);cout << "最大水果收集量为: " << result << endl;return 0;
}

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

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

相关文章

YOLOv5算法进阶改进(14)— 即插即用的动态卷积之ODConv | 助力涨点

​ 前言:Hello大家好,我是小哥谈。动态卷积(Dynamic Convolution)是一种用于目标检测的卷积神经网络模块,其中ODConv(Object Detection Convolution)是其一种具体实现。动态卷积在传统的卷积操作上引入了动态权重,以适应不同目标的形状和尺度变化。本文将YOLOv5的主干网…

Unity游戏开发面试知识点全解读

在数字化世界中&#xff0c;Unity游戏开发不仅是一种艺术形式和商业活动&#xff0c;而且已成为推动整个数字娱乐产业创新和进步的重要力量。Unity以其易用性、高效性和灵活性&#xff0c;赢得了全球开发者的青睐&#xff0c;从独立开发者到大型游戏公司都广泛使用。 掌握Unit…

Python实战:使用DrissionPage库爬取拉勾网职位信息

DrissionPage库&#xff0c;号称可以把Selenium按在地上摩擦&#xff01; 常规情况下&#xff0c;我们借助 requests 库爬取不加密的网站&#xff0c;使用 Selenium 库爬取加密的网站。 requests 效率高&#xff0c;但是解密难度大。Selenium 库可以实现网页自动化&#xff0c…

【星海随笔】RYU控制器(一)

Ryu is a component-based software defined networking framework.   Ryu是一个基于组件的软件定义网络框架 Ryu supports various protocols for managing network devices, such as OpenFlow, Netconf, OF-config, etc.   支持管理网络设备的多种协议 About OpenFlow, R…

Redis 布隆过滤器

布隆过滤器 这一篇文章主要是记录布隆过滤器的使用和认识 主要参考了如下的blog https://blog.csdn.net/weixin_42972832/article/details/131211665 他讲的还不错 简单的来说,布隆过滤器,实际上就像是一个集合,拿redis的key来举例来说,布隆过滤器的设置就是去过滤不属于redi…

【MQ03】发布订阅模式

发布订阅模式 上一回我们已经学习了最典型的消息队列的应用。接下来&#xff0c;我们就要学习到的是消息队列中的另一个非常常见的模式。这个模式其实也是一种设计模式&#xff0c;它叫做发布订阅模式。之前我们学习过的&#xff0c;一个叫生产者&#xff0c;一个叫消费者。而到…

视频融合平台EasyCVR推流成功但平台显示不在线是什么原因?

TSINGSEE青犀视频监控汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安防视频监控的能力&…

环形链表找入环点----链表OJ---三指针

https://leetcode.cn/problems/linked-list-cycle-ii/description/?envTypestudy-plan-v2&envIdtop-100-liked 首先&#xff0c;需要判断是否有环&#xff0c;而这里我们不单纯判断是否有环&#xff0c;还要为下一步做准备&#xff0c;需要让slow指针和fast都从头结点开始…

使用pygame建立一个简单的使用键盘方向键移动的方块小游戏

import pygame import sys# 初始化pygame pygame.init()# 设置窗口大小 screen_size (640, 480) # 创建窗口 screen pygame.display.set_mode(screen_size) # 设置窗口标题 pygame.display.set_caption("使用键盘方向键移动的方块的简单小游戏")# 设置颜色 bg_colo…

RabbitMQ实战指南(三)—— 高级特性

RabbitMQ实战指南&#xff08;三&#xff09;—— 高级特性 RabbitMQ是一个功能强大的消息队列系统&#xff0c;提供了许多高级特性来满足各种消息传递的需求。下面是一些常用的高级特性的详细描述和代码示例&#xff1a; 详细描述 1.TTL&#xff08;Time-To-Live&#xff09;…

MQ回顾之rabbitmq速通

rabbitMQ相对来说功能比较完善&#xff0c;吞吐量会低一点。 持续更新…… 安装 docker 测试选择docker安装 官方安装操作 1、docker pull rabbitmq:latest 2、docker run -d --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq 3、docker…

springboot mapstruct

官网 官网 官方例子 1.POM <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.ap…

transformer_正余弦位置编码代码笔记

transformer_正余弦位置编码代码笔记 transformer输入的序列中&#xff0c;不同位置的相同词汇可能会表达不同的含义&#xff0c;通过考虑位置信息的不同来区分序列中不同位置的相同词汇。 位置编码有多种方式&#xff0c;此处仅记录正余弦位置编码 正余弦位置编码公式如下&…

idea+javafx的真正打包方式

概述&#xff1a;看到网上很多乱说javafx如何打包的&#xff0c;这里写一篇真正可以打包javafx的。 注&#xff1a;使用java17即使里面没有javafx&#xff0c;也是可以运行javafx项目的&#xff0c;只要你们按照下面一步一步来即可。 第一步&#xff1a;编写一个类去调用主类…

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力

ArXiv| Graph-Toolformer: 基于ChatGPT增强提示以赋予大语言模型图数据推理能力. 来自加利福利亚大学戴维斯分校计算机科学系的IFM实验室发表在arXiv上的文章:“Graph-ToolFormer: To Empower LLMs with Graph Reasoning Ability via Prompt Augmented by ChatGPT”。 文章的…

2.1总结

还是一样水更一天&#xff0c;就随便做了几个题&#xff0c;有一个周期有点长&#xff0c;后面更一篇长的 随手刷的一道水题&#xff0c;就不往今天的行程单添了 问题&#xff1a;最大公约数 题解&#xff1a;题目太水了&#xff0c;就是求三个数&#xff0c;其中两组的最大公…

PyTorch识别验证码

## 一、生成测试集数据pip install captcha common.py import random import time captcha_array list("0123456789abcdefghijklmnopqrstuvwxyz") captcha_size 4from captcha.image import ImageCaptchaif __name__ __main__:for i in range(10):image ImageC…

2024美赛数学建模C题思路源码

比赛当天第一时间更新&#xff01; 赛题目的 赛题目的&#xff1a; 问题描述&#xff1a; 解题的关键&#xff1a; 问题一. 问题分析 问题解答 问题二. 问题分析 问题解答 问题三. 问题分析 问题解答 问题四. 问题分析 问题解答 问题五. 问题分析 问题解答

this.$store undefined

报错&#xff1a;vuex报错 this.$store显示undefined&#xff0c;可能存在的问题&#xff0c;从以下几个方向排查 1、查看store文件中的vuex实例对象是否暴漏 2、main.js中是否注入store 3、如果上边均没问题&#xff0c;打开package.json&#xff0c;查看vue与vuex的版本&am…

RT-Thread: STM32F103的DAC 操作、DAC驱动

说明&#xff1a;文档记录基于RT-Thread的STM32F103外设DAC操作。 1.DAC的GPIO配置 函数位于 drivers\stm32f1xx_hal_msp.c //DAC底层驱动&#xff0c;时钟配置&#xff0c;引脚 配置 //此函数会被HAL_DAC_Init()调用 //hdac:DAC句柄 void HAL_DAC_MspInit(DAC_HandleTypeDe…