《算法题讲解指南:优选算法-滑动窗口》--13 水果成篮

《算法题讲解指南:优选算法-滑动窗口》--13 水果成篮

🔥小叶-duck个人主页

❄️个人专栏《Data-Structure-Learning》

《C++入门到进阶&自我学习过程记录》《算法题讲解指南》--从优选到贪心

未择之路,不须回头
已择之路,纵是荆棘遍野,亦作花海遨游


目录

13 水果成篮

题目链接:

​编辑

题目示例:

解法(滑动窗口):

算法思路:

算法流程:

C++代码演示:方法一(使用容器)

C++代码演示:方法二(用数组模拟哈希表)

算法总结及流程解析:

结束语


13 水果成篮

题目链接:

题目示例:

解法(滑动窗口):

算法思路:

      研究的对象是一段连续的区间,可以使用【滑动窗口】思想来解决问题。

      让滑动窗口满足:窗口内水果的种类只有两种。

      做法:右端水果进入窗口的时候,用哈希表统计这个水果的频次。这个水果进来后,判断哈希表的大小

  • 如果大小超过 2:说明窗口内水果种类超过了两种。那么就从最左侧开始依次将水果划出窗口,直到哈希表的大小小于 2 ,然后更新结果;
  • 如果没有超过 2 ,说明当前窗口内水果的种类不超过两种,直到更新结果 len。
算法流程:

  1.初始化哈希表 hash 来统计窗口内水果的种类和数量;

  2.初始化变量:左右指针 left = 0,right = 0,记录结果的变量 len = 0;

  3.当 right 小于数组大小的时候,一直执行下列循环:

  • 将当前水果放入哈希表
  • 判断当前水果进来后,哈希表的大小:

            如果超过 2:

                        将左侧元素滑出窗口,并且在哈希表中将该元素的频次减一;

                        如果这个元素的频次减一之后变成了 0,就把该元素从哈希表中删除;

                        重复上述两个过程,直到哈希表中的大小不超过 2;

  • 更新结果 len;
  • right++,让下一个元素进入窗口;

  4.循环结束后, len 存的就是最终结果。

C++代码演示:方法一(使用容器)

class Solution { public: int totalFruit(vector<int>& fruits) { //方法一:使用容器(如果对哈希掌握不是很好可以看下面方法二) unordered_map<int ,int> hash; //统计窗口内出现水果的种类 int left = 0; int right = 0; int len = 0; for(right = 0; right < fruits.size(); right++) { hash[fruits[right]]++; //进窗口 while(hash.size() > 2) //判断 { hash[fruits[left]]--; //出窗口 if(hash[fruits[left]] == 0) { hash.erase(fruits[left]); } left++; } len = max(len, right - left + 1); //更新结果 } return len; } };

C++代码演示:方法二(用数组模拟哈希表)

class Solution { public: int totalFruit(vector<int>& fruits) { //方法二:用数组模拟哈希表(只需要了解哈希可以对数据存放的次数进行计数即可) int hash[100001] = { 0 };//根据题目提示可知水果种类最多不超过100000 int left = 0; int right = 0; int len = 0; int kinds = 0; //用一个新变量来维护水果种类 for(right = 0; right < fruits.size(); right++) { if(hash[fruits[right]] == 0) { kinds++; } hash[fruits[right]]++; //进窗口 while(kinds > 2) //判断 { hash[fruits[left]]--; //出窗口 if(hash[fruits[left]] == 0) { kinds--; } left++; } len = max(len, right - left + 1); //更新结果 } return len; } };

算法总结及流程解析:

结束语

       到此,13 水果成篮 这道算法题就讲解完了。通过滑动窗口处理连续区间问题。当窗口内水果种类超过2种时,左指针右移调整窗口,利用哈希表统计频次,最终求出最大区间长度。提供C++两种实现:容器版和数组模拟哈希表版。希望大家能有所收获!

Read more

Retinaface+CurricularFace效果案例:高清证件照vs手机自拍跨设备比对结果

Retinaface+CurricularFace效果案例:高清证件照vs手机自拍跨设备比对结果 你有没有遇到过这样的场景?公司新员工入职,需要核对身份证照片和本人是否一致;或者某个线上平台需要你上传手持身份证的照片进行实名认证。这时候,一个靠谱的人脸比对工具就显得尤为重要。 今天,我们就来实测一个非常实用的人脸识别组合:Retinaface+CurricularFace。这个组合就像一个经验丰富的“人脸鉴定师”,能快速、准确地判断两张照片里是不是同一个人。我们这次测试的重点很接地气:用高清的证件照,去比对不同光线、不同角度下用手机随手拍的自拍照。这几乎是日常生活中最常遇到,也最考验模型能力的场景了。 1. 为什么这个组合值得关注? 在开始看效果之前,我们先简单了解一下这对“黄金搭档”是干什么的。 你可以把整个比对过程想象成两个步骤: 1. 找人(Retinaface负责):在一张照片里,不管背景多复杂,它都能像鹰眼一样,精准地找到人脸的位置,并且把脸“框”出来、摆正。这一步很关键,如果脸都没找对,后面就全错了。 2. 认人(CurricularFace负责):拿到摆

By Ne0inhk

5步完美解决智能家居界面美化难题:从功能堆砌到视觉享受

5步完美解决智能家居界面美化难题:从功能堆砌到视觉享受 【免费下载链接】lovelace-ios-themes❤️📱🏠🤖 Themes inspired by iOS Dark ⬛️ and Light ◻️ Mode for Lovelace Home Assistant with different backgrounds by @basnijholt 项目地址: https://gitcode.com/gh_mirrors/lo/lovelace-ios-themes 你是不是也遇到过这样的困扰:打开Home Assistant界面,满眼都是单调的白色背景和生硬的黑色文字,设备控制按钮排列得毫无美感,整个界面看起来更像是一个技术工具而非温馨的智能家居控制中心?别担心,今天我就来帮你彻底解决这个智能家居界面美化难题! 智能家居界面优化的核心痛点 问题一:界面单调乏味 * 默认主题缺乏设计感 * 色彩搭配单一无层次 * 整体视觉效果不够专业 问题二:操作体验不佳 * 功能区域划分不清晰 * 控件设计不够人性化 * 缺乏视觉引导和反馈 问题三:个性化

By Ne0inhk
基于YOLOv8的无人机道路损伤检测[四类核心裂缝/坑洼识别]的识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

基于YOLOv8的无人机道路损伤检测[四类核心裂缝/坑洼识别]的识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用!

基于YOLOv8的无人机道路损伤检测[四类核心裂缝/坑洼识别]的识别项目|完整源码数据集+PyQt5界面+完整训练流程+开箱即用! 源码包含:完整YOLOv8训练代码+数据集(带标注)+权重文件+直接可允许检测的yolo检测程序+直接部署教程/训练教程 源码在文末哔哩哔哩视频简介处获取。 基本功能演示 https://www.bilibili.com/video/BV1H3rFBgESp 项目摘要 本项目基于 YOLOv8 目标检测算法,结合 无人机航拍道路影像数据,构建了一套面向道路养护与巡检场景的多类型道路损伤自动识别系统。系统重点针对四类典型且高风险的路面病害目标进行精准检测与定位,包括:鳄鱼纹裂缝(Alligator Crack)、纵向裂缝(Longitudinal Crack)、**横向裂缝(Transverse Crack)**以及 坑洼(Pothole)。 在模型层面,项目基于 YOLOv8 检测框架完成数据标注规范设计、模型训练与性能调优;

By Ne0inhk
【论文笔记】DeepSeekMath-V2: 基于自我验证的数学推理新范式

【论文笔记】DeepSeekMath-V2: 基于自我验证的数学推理新范式

文章目录 * 一、核心要点 * 二、研究背景 * 2.1 传统的数学推理强化学习方法的局限性 * 2.2 自我可验证是数学推理的关键一步 * 三、主要方法 * 3.1 总体框架概述 * 3.2 Verifier:证明验证器 * 3.2.1 验证目标 * 3.2.2 Verifier 训练过程-RL * 3.3 Meta-Verifier: 验证分析的二级审查器 * 3.3.1 引入的原因与作用 * 3.3.2 Meta-Verifier 训练过程 * 3.3.3 将元验证反馈整合进验证器训练 * 3.4 Generator:证明生成器

By Ne0inhk