小牛丨软件测试学习小牛丨软件测试学习
首页
  • 业务测试面试题
  • 数据库测试面试题
  • 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简历测评🧭入行测评🧪测开测评🎯训练营🏆案例❤赞赏我

5. 双指针题怎么理解

双指针是手撕代码中非常实用的技巧,测试岗面试也经常出现。双指针并不是一种固定算法,而是一种思路:用两个指针协同移动,减少不必要的遍历。常见形式包括左右指针、快慢指针、同向双指针。它经常用于数组、字符串和链表题。

测试岗常考的双指针题包括:反转字符串、判断回文、移动零、合并有序数组、删除有序数组重复项、判断链表是否有环。掌握双指针,很多题都能写得简洁。

一、双指针有哪些类型

1. 左右指针

一个从左开始,一个从右开始,向中间移动。

适合:反转数组、判断回文、两数之和有序版。

2. 快慢指针

两个指针从同一方向出发,移动速度不同。

适合:链表是否有环、删除重复、移动零。

3. 同向双指针

两个指针都向右移动,一个维护窗口或结果位置。

适合:滑动窗口、数组原地修改。

二、反转字符串

def reverse_string(s):
    chars = list(s)
    left, right = 0, len(chars) - 1
    while left < right:
        chars[left], chars[right] = chars[right], chars[left]
        left += 1
        right -= 1
    return "".join(chars)

这是左右指针最基础应用。

三、判断回文

def is_palindrome(s):
    left, right = 0, len(s) - 1
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1
        right -= 1
    return True

边界:空字符串、单字符、奇偶长度。

四、移动零

要求把数组中的 0 移到末尾,保持非零元素相对顺序。

def move_zeroes(nums):
    slow = 0
    for fast in range(len(nums)):
        if nums[fast] != 0:
            nums[slow], nums[fast] = nums[fast], nums[slow]
            slow += 1
    return nums

slow 指向下一个非零元素应该放的位置,fast 用于扫描数组。

五、合并两个有序数组

def merge_sorted(a, b):
    i = j = 0
    result = []
    while i < len(a) and j < len(b):
        if a[i] <= b[j]:
            result.append(a[i])
            i += 1
        else:
            result.append(b[j])
            j += 1
    result.extend(a[i:])
    result.extend(b[j:])
    return result

两个指针分别指向两个数组当前待比较元素。

六、删除有序数组重复项

def remove_duplicates(nums):
    if not nums:
        return 0
    slow = 0
    for fast in range(1, len(nums)):
        if nums[fast] != nums[slow]:
            slow += 1
            nums[slow] = nums[fast]
    return slow + 1

slow 维护去重后数组的最后位置,fast 扫描新元素。

七、链表是否有环

快慢指针经典题:快指针每次走两步,慢指针每次走一步,如果有环一定会相遇。

def has_cycle(head):
    slow = fast = head
    while fast and fast.next:
        slow = slow.next
        fast = fast.next.next
        if slow == fast:
            return True
    return False

边界:空链表、单节点、无环、有环。

八、双指针常见错误

1. 循环条件写错

左右指针常用 left < right,链表快慢指针要判断 fast 和 fast.next。

2. 指针移动遗漏

某个分支忘记移动指针会死循环。

3. 交换顺序错误

原地修改时要注意不要覆盖数据。

4. 没有处理空输入

数组、字符串、链表都要考虑空。

九、面试回答模板

如果面试官问“双指针题怎么理解”,可以这样回答:

双指针是用两个指针协同移动来降低复杂度或实现原地操作。常见有左右指针、快慢指针和同向双指针。左右指针适合反转字符串、判断回文;快慢指针适合链表是否有环;同向双指针适合移动零、删除有序数组重复项和滑动窗口。写双指针题时,我会特别注意循环条件、指针移动和空输入边界,避免死循环和越界。

十、练习清单

  1. 反转字符串;
  2. 判断回文;
  3. 反转数组;
  4. 移动零;
  5. 删除有序数组重复项;
  6. 合并两个有序数组;
  7. 有序数组两数之和;
  8. 链表是否有环;
  9. 找链表中点;
  10. 复述三类双指针。

双指针题的关键是明确两个指针各自代表什么,以及什么时候移动。讲清这个,代码就不容易乱。

配套刷题:

  • 手撕代码
相关推荐

下一步可以看这些

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

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

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

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

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

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

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

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

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

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

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

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

添加小牛微信
Prev
4. 字典 Map 在算法题中怎么用
Next
6. 滑动窗口题怎么入门