zoukankan      html  css  js  c++  java
  • 设计一种结构,在该结构中有如下三个功能:insert(key):将某个key加入到该结构,做到不重复加入。delete(key):将原本在结构中的某个key移除。 getRandom():等概率随机返回结构中的任何一个key。【要求】 Insert、delete和getRandom方法的时间复杂度都是 O(1)

    解题思路:
    创建hashmap,一个存K,数字,另一个存数字,K,每当插入元素时,将元素非别对应插入两个hashmap中
    目的是能够方变随机查找。
    public class RandomPool {
    public static class Pool<K>{
    private HashMap<K,Integer> keyIndexMap;
    private HashMap<Integer,K> indexKeyMap;
    private int size;
    public Pool(){
    keyIndexMap = new HashMap<>();
    indexKeyMap = new HashMap<>();
    size = 0;
    }
    public void insert(K key){
    if(!keyIndexMap.containsKey(key)){
    keyIndexMap.put(key,size);
    indexKeyMap.put(size++,key);
    }

    }
    // A 0 0 A
    // B 1 1 B
    //C 2 2 C
    //D 3 3 D
    //先确定删除的索引,以及最后面的值,把最后面的值补充到删除的地方
    //之后删除开始应该删除的
    public void delete(K key){
    if(keyIndexMap.containsKey(key)){
    int deleteIndex = keyIndexMap.get(key);
    int lastIndex = --size;
    K lastKey = indexKeyMap.get(lastIndex);
    keyIndexMap.put(lastKey,deleteIndex);
    indexKeyMap.put(deleteIndex,lastKey);
    keyIndexMap.remove(key);
    indexKeyMap.remove(lastIndex);
    }
    }
    public K random(){
    if(size==0){
    return null;
    }
    int num = (int) (Math.random()*size);
    return indexKeyMap.get(num);
    }
    }
    }
    总结:多积累。
  • 相关阅读:
    Codeforces 706B Interesting drink
    hdu 1937 Finding Seats
    poj 2502 Subway
    hdu 1495 非常可乐
    分布式的一些基础知识
    python __new__和__init__
    TCP的time_wait、close_wait状态
    TCP三次握手,四次挥手
    迭代器、生成器
    创建自定义JSR303的验证约束(Creating custom constraints)
  • 原文地址:https://www.cnblogs.com/liuwentao/p/9404305.html
Copyright © 2011-2022 走看看