【Java刷题篇】滑动窗口

文章目录

  • 📃滑动窗口
    • 📜基本概念
    • 📜核心思路
  • ✍最大连续1的个数 III
  • ✍水果成篮

📃滑动窗口

📜基本概念

滑动窗口是一种基于双指针的一种思想,两个指针指向的元素之间形成一个窗口。
分类:窗口有两类,一种是固定大小类的窗口,一类是大小动态变化的窗口。
应用:什么情况可以用滑动窗口来解决实际问题呢?

  • 一般给出的数据结构是数组或者字符串
  • 求取某个子串或者子序列最长最短等最值问题或者求某个目标值时
  • 该问题本身可以通过暴力求解

📜核心思路

窗口的形成

在具体使用之前,我们知道窗口实际是两个指针之间形成的区域,那关键就是这两个指针是如何移动的。

  1. 初始时,左右指针left,right都指向第0个元素,窗口为[left,right),注意这里是左闭右开,因此初始窗口[0,0)区间没有元素,符合我们的初始定义
  2. 开始循环遍历整个数组元素,判断当前right指针是否超过整个数组的长度,是退出循环,否则执行第3步
  3. 然后right指针开始向右移动一个长度,并更新窗口内的区间数据
  4. 当窗口区间的数据满足我们的要求时,右指针right就保持不变,左指针left开始移动,直到移动到一个不再满足要求的区间时,left不再移动位置
  5. 执行第2步

✍最大连续1的个数 III

力扣链接: 最大连续1的个数 III
在这里插入图片描述
分析:
本题的难点在于如何对翻转K进行处理,如果我们按照一个数一个数来翻转的话,那就太麻烦了,没有get到这道题考察的知识点。
这里我们可以将翻转K个0转化理解为在一个数组中,找到一段连续的数字,其中这组数字拥有不超过K个0。这是就可以归为滑动窗口来解决这个问题了。

 public int longestOnes(int[] nums, int k) {int left = 0;int right = 0;int count = 0;int max = 0;while (right < nums.length){if (nums[right] == 0){count++;}while (count > k){if (nums[left] == 0){count--;}left++;}max = Math.max(max,right-left+1);right++;}return max;}

✍水果成篮

力扣链接: 水果成篮
在这里插入图片描述
分析
看完题目是不是有点蒙,那么看示例我们就很轻松的可以理解了。我现在来简要概括一下:
在一个数组中,查找一段连续的数组,这段数组中最多只能有两种数字。
简单理解完题目后,我们还是可以用滑动窗口的思想来做,但这道题与第一道并不相同,本题可以拥有两种数字,这时我们引入哈希的思想来处理这个问题。如果你没有学过哈希,那么也可以用数组来代替哈希。

public int totalFruit(int[] fruits) {int ret = 0;Map<Integer,Integer> hash = new HashMap<Integer,Integer>();for (int right = 0,left = 0; right < fruits.length; right++) {int in = fruits[right];hash.put(in,hash.getOrDefault(in,0)+1);while (hash.size() > 2){int out = fruits[left];hash.put(out,hash.get(out)-1);if (hash.get(out) == 0){hash.remove(out);}left++;}ret = Math.max(ret,right - left +1);}return ret;}

以数组来代替哈希:

 public int totalFruit(int[] fruits) {int n = fruits.length;int[] hash = new int[n+1];int ret = 0;for (int right = 0,left = 0,kinds = 0; right < n; right++) {int in = fruits[right];if (hash[in] == 0) kinds++;hash[in]++;while (kinds > 2){int out = fruits[left];hash[out]--;if (hash[out] == 0)kinds--;left++;}ret = Math.max(ret,right-left+1);}return ret;}

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

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

相关文章

Unity构建详解(2)——SBP的初始设置和脚本编译

【SwitchToBuildPlatform】 核心逻辑如下 EditorUserBuildSettings.SwitchActiveBuildTarget(m_Parameters.Group, m_Parameters.Target); 直接调用切换平台的接口&#xff0c;一般来说&#xff0c;这个步骤不会执行&#xff0c;我们打包时肯定会事先将平台切换好的 【Rebu…

安卓面试网络知识基础 41-45

41. 客户端无法使用Cookie怎么办?有可能客户端无法使用Cookie,比如浏览器禁用Cookie,或者客户端是安卓、IOS等等。 这时候怎么办?SessionID怎么存?怎么传给服务端呢? 首先是SessionID的存储,可以使用客户端的本地存储,比如浏览器的sessionStorage。 接下来怎么传呢? 拼…

【物联网】Modbus 协议及应用

Modbus 协议简介 QingHub设计器在设计物联网数据采集时不可避免的需要针对Modbus协议的设备做相关数据采集&#xff0c;这里就我们的实际项目经验分享Modbus协议 简介 Modbus由MODICON公司于1979年开发&#xff0c;是一种工业现场总线协议标准。1996年施耐德公司推出基于以太…

libVLC windows开发环境搭建

1.简介 LibVLC是一个强大的开源库&#xff0c;它构成了VLC媒体播放器的核心部分。 LibVLC提供了一系列的功能接口&#xff0c;使得VLC能够处理流媒体的接入、音频和视频输出、插件管理以及线程系统等核心任务。 跨平台性&#xff1a;VLC作为一个跨平台的多媒体播放器&#x…

Java instanceof

目录 简介 示例 注意事项 应用场景 简介 instanceof 是 Java 的保留关键字也称为类型比较运算符&#xff0c;因为它将实例与类型进行比较它的作用是测试它左边的对象是否是它右边的类的实例&#xff0c;返回 boolean 的数据类型instanceof是Java中的二元运算符&#xff0c…

海外代理IP在跨境电商中的五大应用场景

在我国跨境电商的发展中&#xff0c;海外代理IP的应用日益广泛&#xff0c;它不仅帮助商家成功打入国际市场&#xff0c;还为他们在多变的全球电商竞争中保持优势。下面是海外代理IP在跨境电商中五个关键的应用场景。 1、精准的市场分析 了解目标市场的消费者行为、产品趋势以…

[蓝桥杯 2023 省 B] 飞机降落(暴搜DFS+贪心)

总结&#xff1a;为什么你看到题想不出来怎么写呢&#xff0c;我想不到这道题还会用到dfs的思想&#xff0c;顶多能知道可能会有贪心&#xff0c;还是得多做题。 这道题让我想起来导弹拦截和借教室&#xff0c;记得有空做做&#xff01;&#xff01;不要研究难题&#xff0c;把…

打造专属云存储:私有Docker Registry全面解读与实战部署

在容器技术大行其道的今天&#xff0c;Docker Registry作为容器镜像的中央仓库&#xff0c;扮演着至关重要的角色。当公开的官方镜像库无法满足企业对安全性、可控性及定制化的需求时&#xff0c;搭建私有Docker Registry就显得尤为必要。本文旨在深入剖析私有Docker Registry的…

题目15—三数之和

题目来源于LeetCode 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重…

2000-2021年各省社会消费水平数据(原始数据+计算结果)(无缺失)

2000-2021年各省社会消费水平数据&#xff08;原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、来源&#xff1a;各省年鉴、国家统计局 3、范围&#xff1a;31省 4、指标&#xff1a;社会消费品零售总额&#xff08;亿元&a…

Echarts横向柱形图

项目原型图如下: 实际上就是设置两个y轴&#xff0c;第一个显示底色柱子&#xff0c;另一个只显示真实数据的柱子,在这里只显示y轴,x轴不显示.. this.middleLeftOption {tooltip: {trigger: axis,axisPointer: {}},legend: {data: [回退次数],y: bottom},grid: {left: 3%,righ…

C#使用Entity Framework Core处理数据库(二)

Entity Framework Core&#xff08;EF Core&#xff09;是一个轻量级、跨平台的对象关系映射&#xff08;ORM&#xff09;框架&#xff0c;用于在.NET应用程序中处理数据库操作。它提供了一种将数据库中的数据映射到.NET对象模型的方法&#xff0c;使开发人员可以使用面向对象的…

面试算法-46-三数之和

题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 …

国内 AI 工具集

序号 类型 AI工具名称 入口 功能 聊天/内容生成 1 文心一言 https://yiyan.baidu.com 综合型AI&#xff1a;内容生成、文档分析、图像分析、图表制作、脑图…… 2 通义千问 https://tongyi.aliyun.com 综合型AI&#xff1a;内容生成、文档分析、图像分析…… 3 Kimi(月之暗面…

理论学习:with torch.no_grad()

如果不加上“with torch.no_grad():”&#xff0c;模型参数会发生改变吗&#xff1f; 如果不使用with torch.no_grad():&#xff0c;在进行模型推理&#xff08;即计算outputs_cls net(inputs[batch_size//2:])这一步&#xff09;时&#xff0c;模型参数不会发生改变&#xf…

JAVA实战手册-开篇总述

该专题以实战为出发点&#xff0c;总结概述了实际工作中常用的java知识点&#xff0c;掌握了这些知识点&#xff0c;日常工作开发以及面试都不在话下。 话不多说&#xff0c;直入正题&#xff0c;以下为JAVA知识点概括总结&#xff08;总计涵盖了10大类78小项&#xff09; 针对…

实验7-1-4 选择法排序(PTA)

题目&#xff1a; 本题要求将给定的n个整数从大到小排序后输出。 输入格式&#xff1a; 输入第一行给出一个不超过10的正整数n。第二行给出n个整数&#xff0c;其间以空格分隔。 输出格式&#xff1a; 在一行中输出从大到小有序的数列&#xff0c;相邻数字间有一个空格&am…

关于防火墙

文章目录 一、安全技术和防火墙1、安全技术2、防火墙的分类2.1 按保护范围划分2.2 按实现方式划分2.3 按网络协议划分2.3.1 包过滤防火墙2.3.2 应用层防火墙 二、Linux 防火墙的基本认识1、Netfilter2、防火墙工具介绍2.1 Iptables2.2 Firewalld2.2.1 软件包2.2.2 管理工具 2.3…

在类Unix环境下使用Python

获得并安装Python的最新版本 在Linux中 Python预装在大多数Linux发行版上&#xff0c;并作为一个包提供给所有其他用户。 但是&#xff0c;您可能想要使用的某些功能在发行版提供的软件包中不可用。这时您可以从源代码轻松编译最新版本的Python。 如果Python没有预先安装并且…

【企业战略转型】某音响制造公司发展战略转型管理咨询项目纪实

案例&#xff1a;【客户评价】日本M汽车音响有限公司田总经理&#xff1a;受经济大环境的影响&#xff0c;我公司原有的依赖企业下订单的业务模式受到很大的影响&#xff0c;企业进入“不进则退”的重要转型阶段。当企业生存的关键因素&#xff0c;我们作为典型的OEM汽车音响代…