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);
    }
    }
    }
    总结:多积累。
  • 相关阅读:
    事务使用测试结论
    Enum枚举2
    Enum枚举
    sqlserver数据库存取图片
    sqlserver数据库操作公共类DBOperate
    SqlParamsTool
    sqlserver数据库 -- SqlParameter使用
    sqlserver 数据库连接状态判断
    水晶报表2
    防止系统页面被加载进 iframe 子窗口
  • 原文地址:https://www.cnblogs.com/liuwentao/p/9404305.html
Copyright © 2011-2022 走看看