【面试算法笔记】0302-哈希表-哈希表实现

个人主页:https://github.com/zbhgis

前言

本系列主要记录自己学习算法的过程中的感悟。

力扣705. 设计哈希集合

链接:https://leetcode.cn/problems/design-hashset/description/

注意点

代码

简单数组

TypeScript 复制代码
class MyHashSet {
    boolean[] nodes = new boolean[1000009];
    
    public void add(int key) {
        nodes[key] = true;
    }
    
    public void remove(int key) {
        nodes[key] = false;
    }
    
    public boolean contains(int key) {
        return nodes[key];
    }
}

链表解法

Java 复制代码
class MyHashSet {
    private static final int BASE = 769;
    private LinkedList<Integer>[] data;
    public MyHashSet() {
        data = new LinkedList[BASE];
        for (int i = 0; i < BASE; i ++) {
            data[i] = new LinkedList<>();
        }
    }

    private int hash(int key) {
        return key % BASE;
    }
    
    public void add(int key) {
        int h = hash(key);
        if (!data[h].contains(key)) {
            data[h].add(key);
        }
    }
    
    public void remove(int key) {
        int h = hash(key);
        data[h].remove((Integer) key);
    }
    
    public boolean contains(int key) {
        int h = hash(key);
        return data[h].contains(key);
    }
}

/**
 * Your MyHashSet object will be instantiated and called as such:
 * MyHashSet obj = new MyHashSet();
 * obj.add(key);
 * obj.remove(key);
 * boolean param_3 = obj.contains(key);
 */

时空复杂度分析

力扣706. 设计哈希映射

链接:https://leetcode.cn/problems/design-hashmap/description/

注意点

代码

简单数组

Java 复制代码
class MyHashMap {
    int INF = Integer.MAX_VALUE;
    int N = 1000009;
    int[] map = new int[N];
    public MyHashMap() {
        Arrays.fill(map, INF);
    }
    
    public void put(int key, int value) {
        map[key] = value;
    }
    
    public int get(int key) {
        return map[key] == INF ? -1 : map[key];
    }
    
    public void remove(int key) {
        map[key] = INF;
    }
}

链表解法

Java 复制代码
class MyHashMap {
    private static final int BASE = 769;
    private class Node {
        int key;
        int value;
        Node next;
        Node(int key, int value) {
            this.key = key;
            this.value = value;
        }
    }

    private Node[] buckets;

    public MyHashMap() {
        buckets = new Node[BASE];
    }
    
    private int hash(int key) {
        return key % BASE;
    }
    
    public void put(int key, int value) {
        int h = hash(key);
        Node head = buckets[h];
        
        Node cur = head;
        while (cur != null) {
            if (cur.key == key) {
                cur.value = value;
                return;
            }
            cur = cur.next;
        }
        
        Node newNode = new Node(key, value);
        newNode.next = head;
        buckets[h] = newNode;
    }
    
    public int get(int key) {
        int h = hash(key);
        Node cur = buckets[h];
        
        while (cur != null) {
            if (cur.key == key) {
                return cur.value;
            }
            cur = cur.next;
        }
        
        return -1;
    }
    
    public void remove(int key) {
        int h = hash(key);
        Node head = buckets[h];
        
        if (head != null && head.key == key) {
            buckets[h] = head.next;
            return;
        }
        
        Node prev = head;
        Node cur = head == null ? null : head.next;
        
        while (cur != null) {
            if (cur.key == key) {
                prev.next = cur.next;
                return;
            }
            prev = cur;
            cur = cur.next;
        }
    }
}

/**
 * Your MyHashMap object will be instantiated and called as such:
 * MyHashMap obj = new MyHashMap();
 * obj.put(key,value);
 * int param_2 = obj.get(key);
 * obj.remove(key);
 */

时空复杂度分析

参考

https://programmercarl.com/哈希表理论基础.html

相关推荐
ECT-OS-JiuHuaShan1 小时前
严格证明:还原论是ASCII,整体论是UTF-8的历史意义和价值
开发语言·人工智能·算法·量子计算
ShallWeL1 小时前
【机器学习】(19)—— 数据特性与标签
人工智能·算法·机器学习
AC赳赳老秦1 小时前
时间开销自动统计:OpenClaw 记录工作任务时长、分析时间分配、给出优化建议
java·大数据·开发语言·python·自动化·deepseek·openclaw
hj2862511 小时前
K8S 核心组件与资源概念 + 带注释命令 + 实操案例版笔记
笔记·容器·kubernetes
名侦探7222 小时前
构建 Agent 的五大难点与解决方案
java·大数据·人工智能
Demons_kirit2 小时前
图库原理(以阿里云OSS为案例)
java·阿里云·云计算
SimonKing2 小时前
那个号称"对标 Spring"的国产框架 Solon,到底行不行?
java·后端·程序员
Lethehong2 小时前
飞算Java:从需求梳理到风险闭环,搭建云盾企业信息安全与权限管理平台
java·开发语言