当前位置: 首页 > news >正文

滑动窗口(数组)

作用

滑动窗口:求连续满足条件的最短子数组

代码模板

int left = 0; int right; //外层循环扩展右边界,内层循环扩展左边界 for (right = 0; right < n; right++) { //获取当前考虑的元素 while (left <= right && check()) {//区间[left,right]不符合题意 //统计当前状态值 //左边界移动 } //加入当前元素 } //最后跳出循环再统计一次

实例

例一(力扣第3题)

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

class Solution { public int lengthOfLongestSubstring(String s) { int n = s.length(); int max = 0; int left = 0; Set<Character> set = new HashSet<>(); int right; for(right = 0; right<n; right++){ char c = s.charAt(right); while(right >= left && set.contains(c)){ if(right - left > max){ max = right - left; } set.remove(s.charAt(left)); left++; } //加入当前元素 set.add(c); } //做循环结束后统计 if(right - left > max){ max = right - left; } return max; } }

例二(力扣第209题)

给定一个含有n个正整数的数组和一个正整数target

找出该数组中满足其总和大于等于target的长度最小的子数组[numsl, numsl+1, ..., numsr-1, numsr],并返回其长度如果不存在符合条件的子数组,返回0

import java.util.Scanner; public class sliding_window { public static void main(String[] args) { Scanner sc = new Scanner(System.in); //目标值 int target = sc.nextInt(); int n = sc.nextInt(); //母数组 int[] arr = new int[n]; for (int i = 0; i < n; i++) { arr[i] = sc.nextInt(); } int minNum = minSubArrayLen(target, arr); System.out.println("总和 >=target 的最短子数组长度为:" + minNum); } public static int minSubArrayLen(int target, int[] nums) { int n = nums.length; int left = 0; //记录当前子数组总和 int sum = 0; //记录最短子数组长度 int minNum = Integer.MAX_VALUE; //记录当前子数组长度 int num = 0; //使用 right 遍历 for(int right=0; right<n; right++){ sum += nums[right]; num++; while(sum >= target){ minNum = Math.min(minNum, num); //使用 left 缩小范围 sum -= nums[left++]; num--; } } if(minNum == Integer.MAX_VALUE){ //不存在符合条件的子数组 return 0; }else{ return minNum; } } }
http://www.jsqmd.com/news/813937/

相关文章:

  • Redroid容器化Android环境:原理、部署与CI/CD集成实战
  • 收藏!程序员小白必看:如何从零入门大模型开发,抢占AI时代风口?
  • React Hook useVibe:声明式时序管理与交互感知的工程实践
  • AI编程助手行为约束实践:从规则到脚本的自动化演进
  • Python 爬虫进阶技巧:定时爬虫任务实现无人值守采集
  • 音乐格式自由之路:NCM解密工具的完全掌控指南
  • Gitignore高级技巧:掌握否定规则与例外管理
  • 05-12 · LLM 最新论文速览
  • AI系统行为治理:构建确定性护栏与运行时安全控制
  • claw-installer:构建自动化部署脚本的工程实践与设计哲学
  • Windows 一键部署 OpenClaw 教程|5 分钟搭建本地 AI 智能体,轻松搞定复杂配置
  • 开源首发:DocCenter — AI 时代的 HTML工作台深度解析
  • 第三辑:gptimage2.0生成旅游攻略 + 五张「没试过」的模板
  • AI时代必备技能:小白程序员如何掌握大模型,收藏这篇干货!
  • 基于苏格拉底式提问的LLM深度推理:从概念澄清到工程实践
  • 烹饪食谱与计算机算法:一份精确的步骤指南
  • Deep SORT实战指南:高效多目标追踪的深度解析
  • 系统稳定性测试利器:Roast烤机工具原理与实践指南
  • 10个免费Illustrator脚本:让你的设计效率提升300%的终极工具集
  • 品牌如何零代码搭建专属联盟营销项目,实现被动增长?
  • 游戏交易税、年龄锁与拒付账单:APP出海全球合规风暴
  • AI编程助手技能包:为Claude Code和Cursor注入精准知识库
  • 企业专职消防队的数字化升级:物联网和大数据的结合
  • 免费豆包大模型API代理部署指南:原理、实战与安全实践
  • 为什么你的联盟营销项目转化低?影响联盟收益的6个关键问题
  • ARM SIMD指令VPUSH与VQABS详解及优化实践
  • 做电力仪器选显示屏踩坑3年,终于摸透这四个选型标准
  • 心理学原理在用户体验(UX)设计中的应用:软件测试从业者的专业指南
  • 终极解决方案:3分钟搞定百度网盘提取码的免费自动化工具
  • 瑞芯微(EASY EAI)RV1126B AI模型转换