• 705. 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(value): Remove a value in the HashSet. If the value does not exist in the HashSet, do nothing.


    Example:

    MyHashSet hashSet = new MyHashSet();
    hashSet.add(1);         
    hashSet.add(2);         
    hashSet.contains(1);    // returns true
    hashSet.contains(3);    // returns false (not found)
    hashSet.add(2);          
    hashSet.contains(2);    // returns true
    hashSet.remove(2);          
    hashSet.contains(2);    // returns false (already removed)
    


    Note:

      • All values will be in the range of [0, 1000000].
      • The number of operations will be in the range of [1, 10000].
      • Please do not use the built-in HashSet library.
    class MyHashSet {
        
        List<Integer> list;
        /** Initialize your data structure here. */
        public MyHashSet() {
            list = new ArrayList();
        }
        
        public void add(int key) {
            if(list.indexOf(key) < 0) list.add((Integer) key);
        }
        
        public void remove(int key) {
            if(list.indexOf(key) >= 0) list.remove((Integer) key);
        }
        
        /** Returns true if this set contains the specified element */
        public boolean contains(int key) {
            return list.indexOf((Integer) key) >= 0;
        }
    }

    1. 相当于bruteforce了

    class MyHashSet {
        boolean[] arr = new boolean[100];// start with 100 elements for fast initialization
        /** Initialize your data structure here. */
        public MyHashSet() {
            
        }
        
        public void add(int key) {
            if(key>=arr.length) // if array is too small to accomodate key, extend it.
                extend(key);
            arr[key]=true;
        }
        
        public void remove(int key) {
            if(key>=arr.length) // if array is too small to accomodate key, extend it.
                return;
            arr[key]=false;
        }
        
        /** Returns true if this set contains the specified element */
        public boolean contains(int key) {
            if(key>=arr.length) // key cannot be in array if array's length < key
                return false;
            return arr[key]==true;
        }
        
        public void extend(int key){
            arr= Arrays.copyOf(arr, key+1);  // extend array to one more item than necessary, we need "key" items. 
                                             // we give "key+1" items to reduce collisions.
        }
    }

    2.相当于里面有了检查的阈值

  • 相关阅读:
    js怎么通过逗号将string转换成数组
    设置mysql数据库为只读
    python 关于django 2.X from django.contrib.auth.views import login
    python Django2.X,报错 ‘learning_logs ’is not a registered namespace,如何解决?
    python django2.x报错No module named 'django.core.urlresolvers'
    python Django2.0如何配置urls文件
    VMware vSphere 组件和功能
    VMware vSphere Client的简单使用教程
    python 逻辑运算 ‘and’ ,'or' 在实战中的作用,代替if语句。
    python_urllib2:urlerror和httperror
  • 原文地址:https://www.cnblogs.com/wentiliangkaihua/p/13424247.html
Copyright © 2020-2023  润新知