leetcode 705 设计哈希映射

一  题目概述

不使用任何内建的哈希表库设计一个哈希集合

具体地说,你的设计应该包含以下的功能

  • add(value):向哈希集合中插入一个值。
  • contains(value) :返回哈希集合中是否存在这个值。
  • remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。

二 java算法实现

class MyHashSet {
    private Node[]arr=new Node[1024];    //2的指数,计算hash时可以用 &
    private class Node{
        public Node next;
        public int val;
    }

    /** Initialize your data structure here. */
    public MyHashSet() {

    }

    public void add(int key) {       //尾插法
        Node node=new Node();
        int hash=key&1023;
        node.val=key;
        if(contains(key))
            return;
        if(arr[hash]==null){
            arr[hash]=node;
        }else{
            Node n=arr[hash];
            while(n.next!=null){
                n=n.next;
            }
            n.next=node;
        }
    }

    public void remove(int key) {
        int hash=key&1023;
        if(!contains(key))
            return ;
        else{
             Node n=arr[hash];
             Node n1=n.next;
             if(n.val==key){
                 arr[hash]=n.next;
                 return ;
             } else{
                 while(n1!=null){
                     if(n1.val==key){
                         n.next=n1.next;
                         return ;
                     }
                     n=n.next;
                     n1=n1.next;
                }
             }
         }   

    }

    /** Returns true if this set contains the specified element */
    public boolean contains(int key) {
        int hash=key&1023;
        if(arr[hash]==null)
            return false;
        else{
            Node n=arr[hash];
            while(n!=null){
                if(n.val==key)
                    return true;
                n=n.next;
            }
        }
        return false;
    }
}

通过此题 可以很好的理解hashmap的设计,核心上是个链表的数组,也就是常说的桶的结构

原文地址:https://www.cnblogs.com/caijiwdq/p/10853269.html

时间: 2024-10-10 05:38:45

leetcode 705 设计哈希映射的相关文章

706.设计哈希映射

2020-04-08 设计哈希映射 不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 put(key, value):向哈希映射中插入(键,值)的数值对.如果键对应的值已经存在,更新这个值. get(key):返回给定的键所对应的值,如果映射中不包含这个键,返回-1. remove(key):如果映射中存在这个键,删除这个数值对. 题解: 思路1: 使用对象设计哈希集合 /** * Initialize your data structure here. */ va

705.设计哈希集合

2020-04-07 设计哈希集合 不使用任何内建的哈希表库设计一个哈希集合 具体地说,你的设计应该包含以下的功能 add(value):向哈希集合中插入一个值. contains(value) :返回哈希集合中是否存在这个值. remove(value):将给定值从哈希集合中删除.如果哈希集合中没有这个值,什么也不做. 题解: 思路1: 使用数组设计哈希集合 (不建议) 之所以不建议是因为性能差 每次add,contains或者delete都要遍历看看这个值是不是存在 // 使用数组做hash

LeetCode 706. Design HashMap (设计哈希映射)

题目标签:HashMap 题目让我们设计一个 hashmap, 有put, get, remove 功能. 建立一个 int array, index 是key, 值是 value,具体看code. Java Solution: Runtime: 76 ms, faster than 27.53% Memory Usage: 58.2 MB, less than 31.57% 完成日期:03/18/2019 关键点:int array class MyHashMap { int [] map;

哈希映射

哈希来源问题:关于统计一个字符串集合中,求出现次数最多的字符串思路:建立一个哈希映射(HashMap),其键为"字符串",值为"字符串出现次数",然后遍历字符串集合,如果字符串已存在,将键为该字符串的值加1,否则添加键值对".. 详解javascript哈希映射的HashMap 参考脚本之家 http://www.jb51.net/article/84771.htm Hash Map 的简单实现 //定义一个Hash Map var hashMap={ S

《Javascript权威指南》学习笔记之十二:数组、多维数组和符合数组(哈希映射)

Array(数组)是JavaScript中较为复杂的数据类型,同Java.C#.VB等程序语言的数组相比,Javascript数组中的元素不必为相同的数据类型,可以在数组每个元素上混合使用数字.日期.字符串.Object,甚至添加一个嵌套数组. 一.创建数组 1.var arr1 = new Array(); /var  arr2 = new Array(length); /var arr3 = new Array(element1,element2...); var arr4 = [eleme

LeetCode 705. Design HashSet (设计哈希集合)

题目标签:HashMap 题目让我们设计一个 hashset,有add,contains,remove 功能. 建立一个boolean array,index 是数字的值,具体看code. Java Solution: Runtime: 58 ms, faster than 90.21% Memory Usage: 56.3 MB, less than 68.53% 完成日期:03/18/2019 关键点:boolean array class MyHashSet { boolean [] se

javaEE 用户、部门、角色、权限实体的关系设计与hibernate映射配置文件关系总结

文章中的项目文件已经放到Github上,欢迎大家Follow,star, 地址:https://github.com/lawlite19/SmartEducation 一:设计实体,我这里通过uml设计,然后直接可以生成java实体类(方便查看各个类的关系) (1)用户登录类User与用户详细信息类UserDetails为一对一关系: (2)用户详细信息类UserDetails与部门为多对一关系:(一个部门有多个用户) (3)部门类是自关联的,有上级部门: (3)用户详细类UserDetails

HASH 字符串哈希 映射转化

哈希HASH的本质思想类似于映射.离散化. 哈希,通过给不同字符赋不同的值.并且钦定一个进制K和模数,从而实现一个字符串到一个模意义下的K进制数上. 它的主要目的是判重,用于DFS.BFS判重(八数码),字符串判断相等.出现等等. 本篇总结字符串哈希以及一些应用例题. 为什要用字符串哈希? 因为取出一个字符串是O(n)的,比较一遍又是O(n)的,况且要比较两个甚至多个.这就成了n^2级别的了. 那我们比较数字怎么就不用这么麻烦呢?因为数字可以直接比较,(虽然不知道内部是怎么实现的,反正比一位一位

[Swift]LeetCode705. 设计哈希集合 | Design HashSet

Design a HashSet without using any built-in hash table libraries. To be specific, your design should include these functions: add(value): Insert a value into the HashSet. contains(value) : Return whether the value exists in the HashSet or not. remove