这是悦乐书的第298次更新,第317篇原创

01 看题和准备

今天介绍的是LeetCode算法题中Easy级别的第166题(顺位题号是705)。不使用任何内建的hash表库设计一个hash集合,应包含以下功能:

add(value):向哈希集合中插入一个值。

contains(value) :返回哈希集合中是否存在这个值。

remove(value):将给定值从哈希集合中删除。如果哈希集合中没有这个值,什么也不做。

例如:

MyHashSet hashSet = new MyHashSet();

hashSet.add(1);

hashSet.add(2);

hashSet.contains(1); // 返回 true

hashSet.contains(3); // 返回 false (未找到)

hashSet.add(2);

hashSet.contains(2); // 返回 true

hashSet.remove(2);

hashSet.contains(2); // 返回 false (已经被删除)



注意

  • 所有的值都在 [1, 1000000]的范围内。

  • 操作的总数目在[1, 10000]范围内。

  • 不要使用内建的哈希集合库。

本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

02 第一种解法

利用数组,哈希集合里所有值都在 [1, 1000000]的范围内,用key当作数组下标,如果存入数key就使arrs[key]为1,用于判断哈希集合是否有该值。

    int arrs[]=new int[1000001];
public MyHashSet() { }
public void add(int key) {
arrs[key]=1;
}
public void remove(int key) {
arrs[key]=0;
}
public boolean contains(int key) {
return arrs[key]==1;
}

03 第二种解法

同第一种解法思路。

    boolean arrs[]=new boolean[1000001];
public MyHashSet() { }
public void add(int key) {
arrs[key]=true;
}
public void remove(int key) {
arrs[key]=false;
}
public boolean contains(int key) {
return arrs[key]==true;
}

04 第三种解法

使用ArrayList集合处理,调用它提供的api。

    private List<Integer> list = null;
public MyHashSet() {
list=new ArrayList<>();
}
public void add(int key) {
list.add(key);
}
public void remove(int key) {
for (int i = list.size() - 1; i >= 0; i--) {
if (list.get(i) == key) {
list.remove(i);
}
}
}
public boolean contains(int key) {
return list.contains(key);
}

05 小结

算法专题目前已日更超过四个月,算法题文章166+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

LeetCode算法题-Design HashSet(Java实现)的更多相关文章

  1. LeetCode算法题-Design LinkedList(Java实现)

    这是悦乐书的第300次更新,第319篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第168题(顺位题号是707).设计链表的实现.您可以选择使用单链表或双链表.单链表中的 ...

  2. LeetCode算法题-Design HashMap(Java实现)

    这是悦乐书的第299次更新,第318篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第167题(顺位题号是706).在不使用任何内置哈希表库的情况下设计HashMap.具体 ...

  3. LeetCode算法题-Heaters(Java实现)

    这是悦乐书的第239次更新,第252篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第106题(顺位题号是475).冬天来了!您在比赛期间的第一份工作是设计一个固定温暖半径 ...

  4. LeetCode算法题-Sqrt(Java实现)

    这是悦乐书的第158次更新,第160篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第17题(顺位题号是69). 计算并返回x的平方根,其中x保证为非负整数. 由于返回类型 ...

  5. LeetCode算法题-Unique Morse Code Words(Java实现)

    这是悦乐书的第318次更新,第339篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第186题(顺位题号是804).国际莫尔斯电码定义了一种标准编码,其中每个字母映射到一系 ...

  6. LeetCode算法题-Longest Word in Dictionary(Java实现)

    这是悦乐书的第303次更新,第322篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第171题(顺位题号是720).给出表示英语词典的字符串单词数组,找到单词中长度最长的单 ...

  7. LeetCode算法题-Employee Importance(Java实现)

    这是悦乐书的第291次更新,第309篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第159题(顺位题号是690).定义员工信息的数据结构,其中包括员工的唯一ID,他的重要 ...

  8. LeetCode算法题-Second Minimum Node In a Binary Tree(Java实现)

    这是悦乐书的第285次更新,第302篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第153题(顺位题号是671).给定非空的特殊二叉树,其由具有非负值的节点组成,其中该树 ...

  9. LeetCode算法题-Two Sum IV - Input is a BST(Java实现)

    这是悦乐书的第280次更新,第296篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第148题(顺位题号是653).给定二进制搜索树和目标数,如果BST中存在两个元素,使得 ...

随机推荐

  1. spark Could not write all entries

    使用 spark 将 dataFrame 储存到 elasticsearch 出现如下报错: Caused by: org.elasticsearch.hadoop.EsHadoopException ...

  2. 7.Django CSRF 中间件

    CSRF 1.概述 CSRF(Cross Site Request Forgery)跨站点伪造请求,举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果某个用户已经登录到你的网站上了,那么当这个用 ...

  3. 8.Flask-Script

    Flask-script的作用是可以通过命令行的形式操作flask.安装方式:pip install flask-script 1.1.command装饰器 (1)创建manage.py from f ...

  4. mybatis注解@Param对JavaBean的作用

    当参数是一个JavaBean时,如果不用@Param且sql里获取变量用#{},如@Select("SELECT id,USERNAME,uname from uk_user where d ...

  5. JDK源码分析(3)之 ArrayList 相关

    ArrayList的源码其实比较简单,所以我并没有跟着源码对照翻译,文本只是抽取了一些我觉得有意思或一些有疑惑的地方分析的. 一.成员变量 private static final int DEFAU ...

  6. .Net语言 APP开发平台——Smobiler学习日志:在手机应用中开发蛛网表格

    最前面的话:Smobiler是一个在VS环境中使用.Net语言来开发APP的开发平台,也许比Xamarin更方便 样式一 一.目标样式 我们要实现上图中的效果,需要如下的操作: 1.从工具栏上的”Sm ...

  7. 第57章 GrantValidationResult - Identity Server 4 中文文档(v1.0.0)

    该GrantValidationResult类模型补助确认为扩展授权和资源所有者密码授权的结果. 最常见的用法是使用身份验证(成功用例): context.Result = new GrantVali ...

  8. 第35章 秘密(secrets) - Identity Server 4 中文文档(v1.0.0)

    在某些情况下,客户端需要使用身份服务器进行身份验证,例如 在令牌端点请求令牌的机密应用程序(也称为客户端) API在内省端点验证引用令牌 为此,您可以将秘密列表分配给客户端或API资源. 秘密解析和验 ...

  9. array_merge和array+的区别分析

    记得之前发现很多朋友用过array+array的方式,今天索性再聊下这样的话题:如何获取字符键名相同值不同的两个数组值集合?让我认真比较了下PHP中array_merge和array相加的区别 首先来 ...

  10. mysql修改连接数

    方法一:   进入MySQL安装目录 打开MySQL配置文件 my.ini 或 my.cnf查找 max_connections=100 修改为 max_connections=1000 服务里重起M ...