小牛丨软件测试学习小牛丨软件测试学习
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
首页
  • 业务测试面试题
  • 数据库测试面试题
  • Linux测试环境面试题
  • 网络协议测试面试题
  • 中间件测试面试题
  • Java测试开发面试题
  • Python测试开发面试题
  • Python自动化面试题
  • Java自动化面试题
  • 性能测试面试题
  • 手撕代码
  • HR面试题
  • 系列总入口
  • 业务测试理论
  • 数据库测试
  • Linux测试环境
  • 网络协议
  • 中间件测试
  • Python编程
  • Java编程
  • 自动化测试
  • 性能测试
  • AI测试
  • HR面试
  • AI测试学习路线
  • AI测试基础面试题
  • 大模型测试面试题
  • AI自动化测开面试题
  • AI Agent测试面试题
  • AI性能与稳定性测试面试题
  • AI应用安全测试面试题
  • 互联网大厂面试真题
  • 互联网中厂面试真题
  • 手机厂商面试真题
  • 通信厂商面试真题
  • 新能源汽车面试真题
  • 银行金融面试真题
  • 项目说明
  • 电商接口文档
  • 实战项目总入口
  • 测试简历编写指南
  • 20K level 简历打磨指南
  • 测试简历模板参考
  • 简历常见问题与避坑
  • 零基础入行专题路径
  • 初中级进阶高级专题路径
  • 零基础小白入行软件测试保姆级学习路线
  • 初中级测试进阶高级测试全路线
  • 手撕代码精华文章

    • 手撕代码精华文章
    • 1. 测试岗手撕代码怎么准备
    • 2. 数组题常见解法怎么总结
    • 3. 字符串题常见解法怎么总结
    • 4. 字典 Map 在算法题中怎么用
    • 5. 双指针题怎么理解
    • 6. 滑动窗口题怎么入门
    • 7. 链表题面试怎么讲
    • 8. 排序算法怎么准备
    • 9. 二分查找怎么写不容易错
    • 10. 手撕代码面试表达技巧
⌕
🛒项目实战📦资料包🛠测试神器AIAI路线CV简历测评🧭入行测评🧪测开测评🎯训练营🏆案例❤赞赏我

6. 滑动窗口题怎么入门

滑动窗口是数组和字符串题中的常见技巧。它本质上是用左右边界维护一个连续区间,根据条件扩大或收缩窗口。测试岗手撕代码中,滑动窗口通常考入门题,比如最长无重复子串、固定长度子数组最大和、最小长度子数组等。它比普通遍历稍难,但掌握模板后并不复杂。

滑动窗口特别适合解决“连续子串”“连续子数组”“最长”“最短”“满足条件的区间”这类问题。看到这些关键词,就可以考虑滑动窗口。

一、什么是滑动窗口

窗口就是数组或字符串中的一段连续区间。

例如字符串 abcabcbb 中,abc、bca 都是窗口。

滑动窗口通常有两个指针:

  • left:窗口左边界;
  • right:窗口右边界。

right 向右扩展窗口,left 根据条件收缩窗口。

二、固定窗口

固定窗口长度不变,适合固定长度子数组问题。

例如求长度为 k 的子数组最大和:

def max_sum(nums, k):
    if len(nums) < k:
        return None
    window_sum = sum(nums[:k])
    max_value = window_sum
    for i in range(k, len(nums)):
        window_sum += nums[i] - nums[i - k]
        max_value = max(max_value, window_sum)
    return max_value

每次右边进一个,左边出一个。

三、可变窗口

可变窗口长度会变化,适合最长或最短满足条件的问题。

经典题:最长无重复子串。

def length_of_longest_substring(s):
    seen = {}
    left = 0
    max_len = 0
    for right, ch in enumerate(s):
        if ch in seen and seen[ch] >= left:
            left = seen[ch] + 1
        seen[ch] = right
        max_len = max(max_len, right - left + 1)
    return max_len

这里窗口始终保持无重复字符。

四、滑动窗口通用思路

可以按这个模板思考:

定义 left/right -> 扩大 right -> 更新窗口状态 -> 判断是否满足条件 -> 收缩 left -> 更新答案

关键是窗口内维护什么信息:

  • 当前和;
  • 字符出现次数;
  • 当前最大长度;
  • 是否有重复;
  • 是否满足目标值。

五、最小长度子数组

题目:找和大于等于 target 的最短连续子数组长度。

def min_subarray_len(target, nums):
    left = 0
    total = 0
    ans = float("inf")
    for right, num in enumerate(nums):
        total += num
        while total >= target:
            ans = min(ans, right - left + 1)
            total -= nums[left]
            left += 1
    return 0 if ans == float("inf") else ans

这里 right 扩大窗口,满足条件后 left 收缩,寻找更短答案。

六、滑动窗口和双指针关系

滑动窗口可以看作同向双指针的一种。两个指针都向右移动,维护一个连续区间。

区别是滑动窗口通常会维护窗口状态,比如计数、总和、集合等。

七、常见错误

1. 不知道什么时候移动 left

移动 left 的条件由题目决定,比如有重复、总和超过目标、窗口长度超过 k。

2. 忘记更新窗口状态

left 移动时要把离开窗口的元素从计数或总和中移除。

3. 答案更新位置错误

最长题通常在窗口合法时更新;最短题通常在满足条件后收缩时更新。

4. 边界未处理

空字符串、数组长度小于 k、目标不存在都要处理。

八、测试用例怎么补

滑动窗口题要测:

  • 空输入;
  • 单元素;
  • 全部重复;
  • 全部不重复;
  • 窗口在开头;
  • 窗口在结尾;
  • 不存在满足条件;
  • k 大于数组长度。

九、面试回答模板

如果面试官问“滑动窗口题怎么入门”,可以这样回答:

滑动窗口适合解决连续子数组或子串问题,尤其是最长、最短、固定长度这类题。核心是用 left 和 right 维护一个窗口,right 负责扩大窗口,left 根据条件收缩窗口,同时维护窗口内的状态,比如字符计数或当前和。固定窗口如长度为 k 的子数组最大和,每次右边进一个左边出一个;可变窗口如最长无重复子串,需要用 Map 记录字符位置,遇到重复就移动 left。写完后要测空输入、全重复、无重复和不存在满足条件的场景。

十、练习清单

  1. 固定长度最大和;
  2. 最长无重复子串;
  3. 最小长度子数组;
  4. 字符串中是否包含排列;
  5. 最大连续 1 个数;
  6. 长度为 k 的平均值;
  7. 重复字符窗口收缩;
  8. 手写窗口模板;
  9. 总结 left 移动条件;
  10. 准备滑动窗口表达。

滑动窗口入门的关键是把窗口状态说清楚。只要知道窗口里维护什么、什么时候扩、什么时候缩,就能写出大多数基础题。

配套刷题:

  • 手撕代码
相关推荐

下一步可以看这些

面试通关软件测试面试通关系列精华文章

把面试题、项目、简历和训练营串成一套求职准备路径。

入行路线零基础入行软件测试专题路径

从测评、学习路线、项目、简历到面试,按顺序入行。

进阶路线初中级测试进阶高级专题路径

接口自动化、性能测试、CI/CD、复杂业务质量保障进阶路线。

AI 方向AI 测试学习路线专题页

大模型评测、RAG 测试、Agent 测试和 AI 自动化路线。

求职结果Offer 案例 / 学员案例展示

看看真实学员 Offer 案例,判断目标和学习投入是否匹配。

资料 / 交流群添加小牛微信

备注:资料、简历、AI 或找工作,领取对应资料或进交流群。

添加小牛微信
Prev
5. 双指针题怎么理解
Next
7. 链表题面试怎么讲