优选算法——滑动窗口

优选算法——滑动窗口

优选算法——滑动窗口

1.长度最小的子数组

在这里插入图片描述

解题原理

在这里插入图片描述

📋 解题步骤

第一步:理解题意

  • 找一个连续子数组,使其和 ≥ target,且长度最小
  • 数组元素都是正整数(关键性质)
  • 无解返回 0

第二步:分析暴力解法

  • 枚举所有子数组:O(n²) 或 O(n³)
  • 对于 n = 10⁵ 会超时

第三步:寻找优化点

  • 正整数 → 窗口扩展时和单调递增
  • 可以用滑动窗口优化

第四步:设计滑动窗口

遍历右指针: 扩展窗口 从右边进窗口 判断: 如果 sum >= target: 更新最小长度 收缩窗口 从左边出窗口 

第五步:手动模拟

步骤leftright窗口sumresult
403[2,3,1,2]84
724[1,2,4]73
1045[4,3]72

第六步:编写代码

classSolution{public:intminSubArrayLen(int target, vector<int>& nums){int len=INT_MAX;int n=nums.size();int sum=0;for(int left=0,right=0;right<n;right++){ sum+=nums[right];//进窗口while(sum>=target)//判断{ len=min(len,right-left+1); sum-=nums[left++];}}return len==INT_MAX?0:len;}};

第七步:验证边界

  • 单元素、无解、总和不足等情况

第八步:复杂度

  • 时间:O(n)
  • 空间:O(1)

2. 无重复字符的最长子串

在这里插入图片描述

题目信息

  • 题目:LCR 016. 无重复字符的最长子串(与主站第3题相同)
  • 难度:中等
  • 标签:哈希表、字符串、滑动窗口

解法总结

方法时间复杂度空间复杂度
集合O(n)O(min(n, 128))
哈希表O(n)O(min(n, 128))
数组(推荐)O(n)O(1)

核心思路

滑动窗口法

  1. 用双指针维护一个无重复字符的窗口
  2. 用哈希表/数组记录每个字符最后出现的位置

遇到重复字符时,左指针直接跳到重复字符的下一个位置

在这里插入图片描述

代码示例(C++ 最优解)

classSolution{public:intlengthOfLongestSubstring(string s){int hash[128]={0};int ret=0;int n=s.size();for(int left=0,right=0;right<n;right++){ hash[s[right]]++;//进窗口while(hash[s[right]]>1)//判断{ hash[s[left++]]--;//出窗口} ret=max(ret,right-left+1);}return ret;}}; hash[s[left++]]--;//出窗口} ret=max(ret,right-left+1);}return ret;}};

Read more

从0到1:我的飞算JavaAI实战之旅,效率飙升10倍不是梦!

从0到1:我的飞算JavaAI实战之旅,效率飙升10倍不是梦!

🧑 博主简介:现任阿里巴巴嵌入式技术专家,15年工作经验,深耕嵌入式+人工智能领域,精通嵌入式领域开发、技术管理、简历招聘面试。ZEEKLOG优质创作者,提供产品测评、学习辅导、简历面试辅导、毕设辅导、项目开发、C/C++/Java/Python/Linux/AI等方面的服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:gylzbk) 💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送ZEEKLOG评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的ZEEKLOG昵称,拉你进群,互相学习共同进步。

By Ne0inhk
Java IO详解:File、FileInputStream与FileOutputStream

Java IO详解:File、FileInputStream与FileOutputStream

文章目录 * 引言:Java IO体系与文件操作 * 第一章:IO流基础概念 * 1.1 什么是流(Stream) * 1.2 Java IO流的分类 * 1.3 文件IO的核心类 * 第二章:File类深度剖析 * 2.1 类的定义与核心字段 * 2.2 构造方法:创建File对象 * 2.3 常用API详解 * 2.3.1 获取文件和目录基本信息 * 2.3.2 判断功能 * 2.3.3 列出目录内容 * 2.3.4 创建与删除 * 2.3.5 重命名与移动 * 2.

By Ne0inhk
Java Map常用方法和实现类深度详解

Java Map常用方法和实现类深度详解

文章目录 * 前言 * 第一章 Map接口概述 * 1.1 Map的继承体系 * 1.2 Map的核心特性 * 1.3 存储结构的理解 * 第二章 HashMap:最常用的Map实现 * 2.1 底层数据结构演进 * 2.2 核心源码深度解析 * 2.2.1 重要成员变量 * 2.2.2 设计哲学解读 * 2.3 put方法执行流程 * 2.4 扩容机制(resize) * 2.5 线程安全问题 * 第三章 LinkedHashMap:保持插入顺序 * 3.1 数据结构特点 * 3.2 两种排序模式 * 3.

By Ne0inhk
从深夜加班到高效编程:飞算JavaAI让Java开发焕发新生

从深夜加班到高效编程:飞算JavaAI让Java开发焕发新生

文章目录 * 一、那些让程序员崩溃的深夜时刻 * 1.1 我们都经历过的开发"噩梦" * 痛点一:老项目维护,如同考古挖掘 * 痛点二:重复劳动,消磨编程热情 * 痛点三:团队协作,标准难统一 * 1.2 我们真正需要的是什么? * 1.3 转机出现了 * 二、飞算JavaAI介绍 * 2.1 六大核心功能模块 * 智能引导 - 五步生成完整工程 * Java Chat - 深度上下文感知对话 * 智能问答 - 编程路上的贴心助手 * SQL Chat - 自然语言转SQL查询 * 高级设置 - 个性化开发环境 * 账户管理 - 简单便捷的用户体验 * 三、

By Ne0inhk