Design Phone Directory

要点:坑爹的一题,扩展的话类似LRU,但是本题的accept解直接一个set搞定
https://repl.it/Cu0j

  1. # Design a Phone Directory which supports the following operations:
  2. # get: Provide a number which is not assigned to anyone.
  3. # check: Check if a number is available or not.
  4. # release: Recycle or release a number.
  5. # Example:
  6. # // Init a phone directory containing a total of 3 numbers: 0, 1, and 2.
  7. # PhoneDirectory directory = new PhoneDirectory(3);
  8. # // It can return any available phone number. Here we assume it returns 0.
  9. # directory.get();
  10. # // Assume it returns 1.
  11. # directory.get();
  12. # // The number 2 is available, so return true.
  13. # directory.check(2);
  14. # // It returns 2, the only number that is left.
  15. # directory.get();
  16. # // The number 2 is no longer available, so return false.
  17. # directory.check(2);
  18. # // Release number 2 back to the pool.
  19. # directory.release(2);
  20. # // Number 2 is available again, return true.
  21. # directory.check(2);
  22. # Hide Company Tags Google
  23. # Hide Tags Linked List Design
  24. class PhoneDirectory(object):
  25. def __init__(self, maxNumbers):
  26. """
  27. Initialize your data structure here
  28. @param maxNumbers - The maximum numbers that can be stored in the phone directory.
  29. :type maxNumbers: int
  30. """
  31. self.available = set(range(maxNumbers))
  32. def get(self):
  33. """
  34. Provide a number which is not assigned to anyone.
  35. @return - Return an available number. Return -1 if none is available.
  36. :rtype: int
  37. """
  38. return self.available.pop() if self.available else -1
  39. def check(self, number):
  40. """
  41. Check if a number is available or not.
  42. :type number: int
  43. :rtype: bool
  44. """
  45. return number in self.available
  46. def release(self, number):
  47. """
  48. Recycle or release a number.
  49. :type number: int
  50. :rtype: void
  51. """
  52. self.available.add(number)
  53. # Your PhoneDirectory object will be instantiated and called as such:
  54. # obj = PhoneDirectory(maxNumbers)
  55. # param_1 = obj.get()
  56. # param_2 = obj.check(number)
  57. # obj.release(number)

边工作边刷题:70天一遍leetcode: day 70的更多相关文章

  1. 边工作边刷题:70天一遍leetcode: day 89

    Word Break I/II 现在看都是小case题了,一遍过了.注意这题不是np complete,dp解的time complexity可以是O(n^2) or O(nm) (取决于inner ...

  2. 边工作边刷题:70天一遍leetcode: day 77

    Paint House I/II 要点:这题要区分房子编号i和颜色编号k:目标是某个颜色,所以min的list是上一个房子编号中所有其他颜色+当前颜色的cost https://repl.it/Chw ...

  3. 边工作边刷题:70天一遍leetcode: day 78

    Graph Valid Tree 要点:本身题不难,关键是这题涉及几道关联题目,要清楚之间的差别和关联才能解类似题:isTree就比isCycle多了检查连通性,所以这一系列题从结构上分以下三部分 g ...

  4. 边工作边刷题:70天一遍leetcode: day 85-3

    Zigzag Iterator 要点: 实际不是zigzag而是纵向访问 这题可以扩展到k个list,也可以扩展到只给iterator而不给list.结构上没什么区别,iterator的hasNext ...

  5. 边工作边刷题:70天一遍leetcode: day 101

    dp/recursion的方式和是不是game无关,和game本身的规则有关:flip game不累加值,只需要一个boolean就可以.coin in a line II是从一个方向上选取,所以1d ...

  6. 边工作边刷题:70天一遍leetcode: day 1

    (今日完成:Two Sum, Add Two Numbers, Longest Substring Without Repeating Characters, Median of Two Sorted ...

  7. 边工作边刷题:70天一遍leetcode: day 71-3

    Two Sum I/II/III 要点:都是简单题,III就要注意如果value-num==num的情况,所以要count,并且count>1 https://repl.it/CrZG 错误点: ...

  8. 边工作边刷题:70天一遍leetcode: day 71-2

    One Edit Distance 要点:有两种解法要考虑:已知长度和未知长度(比如只给个iterator) 已知长度:最好不要用if/else在最外面分情况,而是loop在外,用err记录misma ...

  9. 边工作边刷题:70天一遍leetcode: day 71-1

    Longest Substring with At Most K Distinct Characters 要点:要搞清楚At Most Two Distinct和Longest Substring W ...

随机推荐

  1. css中important的用处

    今天看代码时遇到一段不理解的地方. #note_content { line-height: 22px; border: #DEDEDE 1px solid; background: #FAFAFA; ...

  2. Mysql的简单使用(三)

    接上文Mysql的简单使用(二) mysql中结构相同的两个表进行合并:(注意需要两个表的结构是一样的) 有如下结构的两个表father和person. 合并的步骤为: 1.把person表和fath ...

  3. 转收藏:Git常用命令速查表

    一. Git 常用命令速查 git branch 查看本地所有分支git status 查看当前状态 git commit 提交 git branch -a 查看所有的分支git branch -r ...

  4. Android 提供的一系列辅助系统开发工具

    除了软件本身的代码之外,Android 还提供了一系列工具来辅助系统开发,这些主要的工具包括: aapt(AndroidAssetPackagingTool):用于建立zip兼容的包(zip.jar. ...

  5. Snort - manual 笔记(二)

    1.5 Packet Acquisition Snort 2.9 引入 DAQ 代替直接调用 libpcap . 有两种网卡特性会影响 Snort : "Large Receive Offl ...

  6. SharePoint 2013 创建web应用程序报错"This page can’t be displayed"

    错误描述 This page can’t be displayed •Make sure the web address http://centeradmin is correct. •Look fo ...

  7. Oracle数据库中创建表空间语句

    1:创建临时表空间 create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj ...

  8. 第一节 SOA的基本概念和设计思想

    WCF一直很火,一直也没有时间来静下心来学习新的技术.不知不觉已经做程序八年了,其中的时间基本都费了,刚入门时很火热,后来慢慢热情被琐事取代.现在开始学习JAVA和WCF,学JAVA的原因就是想做手机 ...

  9. java多线程系列8-线程的优先级

    在java中设置线程优先级使用setPriority,在jdk中的源代码如下: public final void setPriority(int newPriority) { ThreadGroup ...

  10. Java从零开始学四十六(Junit)

    一.软件测试 软件开发: 项目调研--需求分析--软件设计--程序编码--软件测试--运行维护 软件测试:利用测试工具按照测试方案和流程对产品进行功能和性能测试,使用人工或者自动手段来运行或测试某个系 ...