zoukankan      html  css  js  c++  java
  • 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  */
  • 相关阅读:
    warning: ISO C++ forbids converting a string constant to 'char*' [-Wwrite-strings]
    Windows10+CLion+OpenCV4.5.2开发环境搭建
    Android解决部分机型WebView播放视频全屏按钮灰色无法点击、点击全屏白屏无法播放等问题
    MediaCodec.configure Picture Width(1080) or Height(2163) invalid, should N*2
    tesseract
    Caer -- a friendly API wrapper for OpenCV
    Integrating OpenCV python tool into one SKlearn MNIST example for supporting prediction
    Integrating Hub with one sklearn mnist example
    What is WSGI (Web Server Gateway Interface)?
    Hub --- 机器学习燃料(数据)的仓库
  • 原文地址:https://www.cnblogs.com/lishiblog/p/5748931.html
Copyright © 2011-2022 走看看