• LeetCode-Design Phone Directory


    Design a Phone Directory which supports the following operations:

    1. get: Provide a number which is not assigned to anyone.
    2. check: Check if a number is available or not.
    3. release: Recycle or release a number.

    Example:

    // Init a phone directory containing a total of 3 numbers: 0, 1, and 2.
    PhoneDirectory directory = new PhoneDirectory(3);
    
    // It can return any available phone number. Here we assume it returns 0.
    directory.get();
    
    // Assume it returns 1.
    directory.get();
    
    // The number 2 is available, so return true.
    directory.check(2);
    
    // It returns 2, the only number that is left.
    directory.get();
    
    // The number 2 is no longer available, so return false.
    directory.check(2);
    
    // Release number 2 back to the pool.
    directory.release(2);
    
    // Number 2 is available again, return true.
    directory.check(2);
    
     
     Analysis:
     
    We record the last used number and also maintain a hashset to record all released number. Everytime get() called, we first get a released number, if not, then use an unused number.
     
    Solution:
     1 public class PhoneDirectory {
     2     HashSet<Integer> numReleased;
     3     int maxNum, nextUnuse;
     4 
     5 
     6     /** Initialize your data structure here
     7         @param maxNumbers - The maximum numbers that can be stored in the phone directory. */
     8     public PhoneDirectory(int maxNumbers) {
     9         numReleased = new HashSet<Integer>();
    10         maxNum = maxNumbers;
    11         nextUnuse = 0;
    12         
    13     }
    14     
    15     /** Provide a number which is not assigned to anyone.
    16         @return - Return an available number. Return -1 if none is available. */
    17     public int get() {
    18         int num = -1;
    19         if (!numReleased.isEmpty()) {
    20             for (Integer i : numReleased) {
    21                 num = i;
    22                 break;
    23             }
    24             numReleased.remove(num);
    25         } else if (nextUnuse < maxNum) {
    26             num = nextUnuse++;
    27         }
    28         return num;
    29     }
    30     
    31     /** Check if a number is available or not. */
    32     public boolean check(int number) {
    33         if (number >= maxNum) return false;
    34 
    35         if (number >= nextUnuse || numReleased.contains(number)) return true;
    36 
    37         return false;
    38     }
    39     
    40     /** Recycle or release a number. */
    41     public void release(int number) {
    42         if (number >= nextUnuse)  return;
    43         numReleased.add(number);
    44     }
    45 }
    46 
    47 /**
    48  * Your PhoneDirectory object will be instantiated and called as such:
    49  * PhoneDirectory obj = new PhoneDirectory(maxNumbers);
    50  * int param_1 = obj.get();
    51  * boolean param_2 = obj.check(number);
    52  * obj.release(number);
    53  */
  • 相关阅读:
    怎么获取pm2.5数据----pm2.5 的获取 java 通过url获取后,得到json 格式,在解析json
    MVC介绍
    如何通过URL获取天气PM2.5的数据,返回json
    23种设计模式
    xxx系统的6大质量属性战术
    作业04.提升系统性能
    淘宝网的质量属性分析
    架构漫谈读后感
    软件架构师工作流程----装修与软件的联系
    软件构架实践阅读笔记五(读后感)
  • 原文地址:https://www.cnblogs.com/lishiblog/p/5748931.html
Copyright © 2020-2023  润新知