水果成篮 ---- 滑动窗口

2024-05-10 14:44
文章标签 窗口 滑动 水果 成篮

本文主要是介绍水果成篮 ---- 滑动窗口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 题目链接

题目:

 

分析:

  • 题目中, 我们只能连续采摘树, 而且采摘的树不能超过两种,找到可以包含最多树的方案, 所以我们可以理解为: 找到最长的连续子数组, 子数组中的数据种类不大于两种, 因为是找连续子数组, 我们很容易可以想到要用“滑动窗口”
  • 我们需要记录子数组的数据种类及出现的次数, 所以可以使用map容器
  • 定义left = 0,right = 0
  • 进窗口  让right指针进窗口,存在key, 更新value的值
  • 判断  如果子数组的数据种类大于2,即map的size大于2
  • 出窗口  让left指针出窗口, 并更新value的值, 如果此时value值为0,则删除对应的key
  • 更新结果 记录最大的长度, 并返回

代码: 

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

用map容器, 当我们提交代码时, 发现时空代价较大,所以我们可以使用hash数组, 记录fruits数组中数据对应hash表的下标, 用hash表记录出现的次数, 需要额外定义一个变量记录此时的类型数量 

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

这篇关于水果成篮 ---- 滑动窗口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Python中pywin32 常用窗口操作的实现

《Python中pywin32常用窗口操作的实现》本文主要介绍了Python中pywin32常用窗口操作的实现,pywin32主要的作用是供Python开发者快速调用WindowsAPI的一个... 目录获取窗口句柄获取最前端窗口句柄获取指定坐标处的窗口根据窗口的完整标题匹配获取句柄根据窗口的类别匹配获取句

MySQL高级查询之JOIN、子查询、窗口函数实际案例

《MySQL高级查询之JOIN、子查询、窗口函数实际案例》:本文主要介绍MySQL高级查询之JOIN、子查询、窗口函数实际案例的相关资料,JOIN用于多表关联查询,子查询用于数据筛选和过滤,窗口函... 目录前言1. JOIN(连接查询)1.1 内连接(INNER JOIN)1.2 左连接(LEFT JOI

bat脚本启动git bash窗口,并执行命令方式

《bat脚本启动gitbash窗口,并执行命令方式》本文介绍了如何在Windows服务器上使用cmd启动jar包时出现乱码的问题,并提供了解决方法——使用GitBash窗口启动并设置编码,通过编写s... 目录一、简介二、使用说明2.1 start.BAT脚本2.2 参数说明2.3 效果总结一、简介某些情

基于Redis有序集合实现滑动窗口限流的步骤

《基于Redis有序集合实现滑动窗口限流的步骤》滑动窗口算法是一种基于时间窗口的限流算法,通过动态地滑动窗口,可以动态调整限流的速率,Redis有序集合可以用来实现滑动窗口限流,本文介绍基于Redis... 滑动窗口算法是一种基于时间窗口的限流算法,它将时间划分为若干个固定大小的窗口,每个窗口内记录了该时间

使用JS/Jquery获得父窗口的几个方法(笔记)

<pre name="code" class="javascript">取父窗口的元素方法:$(selector, window.parent.document);那么你取父窗口的父窗口的元素就可以用:$(selector, window.parent.parent.document);如题: $(selector, window.top.document);//获得顶级窗口里面的元素 $(

904.水果成篮

题目 链接:leetcode链接 思路分析(滑动窗口) 读完题目,很明显,这个题目需要我们寻找一个最长子数组,使得这个子数组里面最多存在两种不同的数字,很容易联想到使用滑动窗口。 另外,需要使用hash表来记录区间内的不同种水果的个数 首先还是left,right = 0; 进窗口:right进哈希表 判断:哈希表的size > 2,就需要出窗口 出窗口:hash[left]–的同时,

专题二_滑动窗口_算法专题详细总结

目录 滑动窗口,引入: 滑动窗口,本质:就是同向双指针; 1.⻓度最⼩的⼦数组(medium) 1.解析:给我们一个数组nums,要我们找出最小子数组的和==target,首先想到的就是暴力解法 1)暴力: 2)优化,滑动窗口: 1.进窗口 2.出窗口 3.更新值 2.⽆重复字符的最⻓⼦串(medium) 1)仍然是暴力解法: 2)优化: 进窗口:hash[s[rig

hot100刷题第1-9题,三个专题哈希,双指针,滑动窗口

求满足条件的子数组,一般是前缀和、滑动窗口,经常结合哈希表; 区间操作元素,一般是前缀和、差分数组 数组有序,更大概率会用到二分搜索 目前已经掌握一些基本套路,重零刷起leetcode hot 100, 套路题按套路来,非套路题适当参考gpt解法。 一、梦开始的地方, 两数之和 class Solution:#注意要返回的是数组下标def twoSum(self, nums: Lis

主窗口的设计与开发(二)

主窗口的设计与开发(二) 前言         在上一集当中,我们完成了主窗口的初始化,主窗口包括了左中右三个区域。我们还完成了对左窗口的初始化,左窗口包括了用户头像、会话标签页按钮、好友标签页按钮以及好友申请标签页按钮。对于切换每个标签页,我们还做了初始化信号槽的内容。最后我们将整个MainWidget类设置为单例模式。         那么这一集我们将继续完成主窗口的设计与开发,这一集我