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

4. 字典 Map 在算法题中怎么用

字典或 Map 是手撕代码中最常用的辅助数据结构之一。Python 中叫 dict,Java 中常用 HashMap。它的核心价值是用空间换时间,把原本需要双层循环查找的问题,优化成一次遍历。测试岗面试中,Map 常用于两数之和、字符频次统计、数组去重、找重复元素、找第一个不重复字符、分组统计等题型。

对测试工程师来说,Map 也非常贴近日常工作。接口请求参数、Header、响应 JSON、配置项、数据库字段,都可以用键值对表达。因此 Map 题不仅是算法基础,也和测试自动化数据处理高度相关。

一、Map 适合解决什么问题

看到下面关键词,可以优先想到 Map:

  • 是否出现过;
  • 出现几次;
  • 快速查找;
  • 根据 key 找 value;
  • 统计频次;
  • 去重;
  • 分组;
  • 两个值是否匹配。

Map 的平均查找复杂度通常是 O(1),所以可以提升效率。

二、两数之和

这是 Map 最经典应用。

def two_sum(nums, target):
    seen = {}
    for i, num in enumerate(nums):
        need = target - num
        if need in seen:
            return [seen[need], i]
        seen[num] = i
    return []

思路:遍历当前数时,检查补数是否已经出现。

复杂度:时间 O(n),空间 O(n)。

三、字符频次统计

def count_chars(s):
    counter = {}
    for ch in s:
        counter[ch] = counter.get(ch, 0) + 1
    return counter

适合判断重复字符、统计日志关键字、比较两个字符串字符组成。

四、找第一个不重复字符

def first_unique_char(s):
    counter = {}
    for ch in s:
        counter[ch] = counter.get(ch, 0) + 1
    for i, ch in enumerate(s):
        if counter[ch] == 1:
            return i
    return -1

注意第二次遍历要按原字符串顺序,否则找不到“第一个”。

五、数组去重

如果只需要去重,可以用 Set;如果要统计次数,用 Map。

def count_nums(nums):
    counter = {}
    for num in nums:
        counter[num] = counter.get(num, 0) + 1
    return counter

如果需要找出现次数最多的数字,也可以基于这个 Map。

六、分组问题

例如按字符串长度分组:

def group_by_length(words):
    result = {}
    for word in words:
        key = len(word)
        if key not in result:
            result[key] = []
        result[key].append(word)
    return result

Java 中类似 Map<Integer, List<String>>。

七、Map 在接口自动化中的类比

接口自动化中:

headers = {"Authorization": "Bearer token"}
payload = {"username": "tester", "password": "123456"}
response = {"code": 0, "message": "success"}

这些本质都是 key-value。算法题中的 Map 能力,会直接迁移到测试数据处理。

八、Map 使用常见坑

1. key 不存在

Python 可以用 get 避免 KeyError:

counter[ch] = counter.get(ch, 0) + 1

Java 中要注意 map.get(key) 可能返回 null。

2. 覆盖旧值

同一个 key 赋值多次,后面的会覆盖前面的。

3. 不保证顺序

Python 现代版本 dict 保持插入顺序,但算法题不要过度依赖。Java HashMap 不保证顺序。

4. 空间复杂度

Map 提高速度,但会占用额外空间。

九、Java 写法参考

Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
    int need = target - nums[i];
    if (map.containsKey(need)) {
        return new int[]{map.get(need), i};
    }
    map.put(nums[i], i);
}
return new int[]{};

测试开发面试中,如果你用 Java,就要熟悉 put、get、containsKey。

十、面试回答模板

如果面试官问“字典 Map 在算法题中怎么用”,可以这样回答:

Map 主要用于快速查找和统计频次。遇到是否出现过、出现几次、根据值找下标、去重统计这类题,我会优先考虑 Map。比如两数之和,用 Map 保存已遍历数字和下标,遍历当前数时检查 target - num 是否存在,可以把时间复杂度从 O(n²) 优化到 O(n)。字符频次统计、找第一个不重复字符、数组重复元素也都可以用 Map。使用时要注意 key 不存在、重复 key 覆盖和空间复杂度。

十一、练习清单

  1. 两数之和;
  2. 字符频次统计;
  3. 第一个不重复字符;
  4. 数组元素计数;
  5. 找重复数字;
  6. 找出现次数最多元素;
  7. 判断异位词;
  8. 分组字符串;
  9. 用 Java HashMap 写两数之和;
  10. 准备 Map 面试表达。

Map 是手撕代码高频工具。掌握它,可以解决很多查找、统计和去重类问题。

配套刷题:

  • 手撕代码
相关推荐

下一步可以看这些

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

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

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

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

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

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

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

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

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

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

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

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

添加小牛微信
Prev
3. 字符串题常见解法怎么总结
Next
5. 双指针题怎么理解