算法:哈希表

Java 哈希表题型模板与例题

一、计数类(Counting)

模板:

java 复制代码
Map<Integer, Integer> map = new HashMap<>();
for (int num : nums) {
    map.put(num, map.getOrDefault(num, 0) + 1);
}
for (Map.Entry<Integer, Integer> entry : map.entrySet()) {
    if (entry.getValue() > n / 2) return entry.getKey();
}

例题:

二、查找/去重类(Lookup / Deduplication)

模板:

java 复制代码
Set<Integer> set = new HashSet<>();
for (int num : nums) {
    if (!set.add(num)) {
        // 已存在,处理逻辑
    }
}

例题:

三、映射类(Mapping)

模板:

java 复制代码
Map<Character, Character> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
    if (!map.containsKey(s.charAt(i))) {
        map.put(s.charAt(i), t.charAt(i));
    } else if (map.get(s.charAt(i)) != t.charAt(i)) {
        return false;
    }
}

例题:

四、前缀和/累计和类(Prefix / Cumulative Sum)

模板:

java 复制代码
Map<Integer, Integer> prefixSum = new HashMap<>();
prefixSum.put(0, 1);
int sum = 0, count = 0;
for (int num : nums) {
    sum += num;
    if (prefixSum.containsKey(sum - k)) count += prefixSum.get(sum - k);
    prefixSum.put(sum, prefixSum.getOrDefault(sum, 0) + 1);
}

例题:

五、滑动窗口 + 哈希表

模板:

java 复制代码
Map<Character, Integer> window = new HashMap<>();
int left = 0, right = 0;
while (right < s.length()) {
    char c = s.charAt(right++);
    window.put(c, window.getOrDefault(c, 0) + 1);

    while (window满足条件) {
        // 更新答案
        char d = s.charAt(left++);
        window.put(d, window.get(d) - 1);
        if (window.get(d) == 0) window.remove(d);
    }
}

例题:

相关推荐
qq_417695052 分钟前
内存对齐与缓存友好设计
开发语言·c++·算法
2301_816651222 分钟前
实时系统下的C++编程
开发语言·c++·算法
2401_831824963 分钟前
C++与Python混合编程实战
开发语言·c++·算法
苦瓜小生6 分钟前
【黑马点评学习笔记 | 实战篇 】| 7-达人探店
redis·笔记·后端·学习
2301_8166512211 分钟前
C++中的策略模式高级应用
开发语言·c++·算法
大树学长12 分钟前
【QT开发】Redis通信相关(一)
redis·qt
LDR00613 分钟前
如何使用OpenClaw提高工作效率?
数据结构·算法
liuyao_xianhui13 分钟前
优选算法_模拟_替换所有的‘?‘_C++
开发语言·javascript·数据结构·c++·算法·链表·动态规划
币之互联万物19 分钟前
LLM 偏好算法解析:大语言模型内容收录倾向与 NEOXGEO 技术底蕴
人工智能·算法·语言模型