滑动窗口_水果成篮_C++

题目:

题目解析:

  • fruitsi表示第i棵树,这个fruitsi所表示的数字是果树的种类
  • 例如示例1中的1,2,1,表示第一棵树 的种类是 1,第二个树的种类是2 第三个树的种类是1
  • 随后每一个篮子只能装一种类型的水果,我们有两个篮子
  • 所以最后求的是可以采摘几棵树
  • 问题转化就是求最长的连续的子数组!而且这个数组只能有两种数字!

算法原理:

根据题目的解析,我们需要知道本题需要 用于计算水果种类的 kinds 、用于存储水果的果篮 hash、用于寻找连续数组的指针 right、left

使用left指针进行固定,从最左端开始,而right指针开始移动进行水果的摘取 ,同时一边摘取水果一边将水果放入篮子内部,同时更新right和left之间的距离长度,以此来获取最大的连续子数组长度。

在水果摘取的过程中,因为篮子内部只能是两种水果,所以使用数组,把代表水果的数字作为下标,进行水果的数量记载,当遇到第三个水果时,right停止移动,表示篮子内部的两种水果的组合在当前结束了。

而当right停止移动时,left就要开始移动,因为篮子只能存在两种水果,且需要子数组连续,所以可以让left一边移动的同时一边减去指向的元素的个数,使得水果的数量减少的同时也能够将果篮内的另一个水果排除,让水果篮内部至少留下一个水果,和新种类的水果组成新的组合。

当水果蓝内的水果只剩下一种时,left停止移动,而right开始重新移动,直到遇见另一个新的水果停下,之后重复之前的操作。

代码编写:

  • 使用一个内容巨大的数组来充当水果篮子
  • hashf\[right]和hashf\[left]表示的是这个元素的数量。相当于是让这个元素变成一种下标索引,在这个超级大的数组内部,进行数量的统计!
  • kinds表示一共有多少种类的元素,最多只能是2
  • 当kind大于2时我们需要减去left指向的元素的个数,同时因为种类的原因,且需要进行连续,所以在种类重新编程小于等于2之前,元素的个数都必须减少,直到某一个元素消失kind小于等于2为止!
相关推荐
CodeYp20192 分钟前
第19讲:封装红黑树实现 mymap 和 myset
开发语言·c++·红黑树
孙鹏宇.38 分钟前
C++类型转换
c++
超级架构师1 小时前
让 COBOL 长出 AI 大脑:原生 Agent 核心框架 praxo-core 深度剖析
c语言·开发语言·c++·人工智能·python·架构·ai编程
·present·1 小时前
CSAPP(lecture 10)
c语言·c++
YLCHUP1 小时前
【模拟&STL】题解:AT_abc203_e [ABC203E] White Pawn_基础算法_数据结构_STL模板库_AtcoderABC_C++算法竞赛
数据结构·c++·算法·leetcode·动态规划·哈希算法·近邻算法
xiaolang_8616_wjl1 小时前
c++游戏_宝可梦大世界(源代码)
开发语言·c++·游戏
余额瞒着我当琳2 小时前
C++异常,异常的概念,异常抛出与捕获,RAII 和智能指针的设计思路,C++标准库一些指针的使用
java·开发语言·c++·算法
東隅已逝,桑榆非晚2 小时前
map和set的使用
数据结构·c++·笔记·学习
骑着蜗牛撵大象3272 小时前
大模型 SDK 编译就崩?用 CMakeLists 把 httplib、JSON 与 OpenSSL 装配成可复用的 ChatServer
android·java·c++·http·json·cmake·大模型sdk
码小猿的CPP工坊3 小时前
C++跨平台开发之基于wxWidgets开发GUI程序简介-002
开发语言·c++