Design Phone Directory

怼烎@ 2022-02-23 13:44 276阅读 0赞

Design Phone Directory

题目链接:https://leetcode.com/problems…

直接用一个set,结果tle了= =

  1. public class PhoneDirectory {
  2. /** Initialize your data structure here
  3. @param maxNumbers - The maximum numbers that can be stored in the phone directory. */
  4. Set<Integer> set = new HashSet();
  5. int maxNum;
  6. public PhoneDirectory(int maxNumbers) {
  7. for(int i = 0; i < maxNumbers; i++) set.add(i);
  8. maxNum = maxNumbers;
  9. }
  10. /** Provide a number which is not assigned to anyone.
  11. @return - Return an available number. Return -1 if none is available. */
  12. public int get() {
  13. // no available numbers left
  14. if(set.size() == 0) return -1;
  15. // return 1 number
  16. else {
  17. int number = set.iterator().next();
  18. set.remove(number);
  19. return number;
  20. }
  21. }
  22. /** Check if a number is available or not. */
  23. public boolean check(int number) {
  24. return set.contains(number);
  25. }
  26. /** Recycle or release a number. */
  27. public void release(int number) {
  28. if(number >= 0 && number < maxNum) set.add(number);
  29. }
  30. }

看了discussion加了个queue,不过感觉没什么必要加q,反正保存的都一样,只是set.iterator().next()的时间大于O(1),用q可以保证O(1)。看了题目条件是get可以随便返回一个值,但是test case不让这么做。很无语啊

  1. public class PhoneDirectory {
  2. /** Initialize your data structure here
  3. @param maxNumbers - The maximum numbers that can be stored in the phone directory. */
  4. Set<Integer> set = new HashSet();
  5. int maxNum;
  6. Queue<Integer> available = new LinkedList();
  7. public PhoneDirectory(int maxNumbers) {
  8. for(int i = 0; i < maxNumbers; i++) available.add(i);
  9. maxNum = maxNumbers;
  10. }
  11. /** Provide a number which is not assigned to anyone.
  12. @return - Return an available number. Return -1 if none is available. */
  13. public int get() {
  14. // no available numbers left
  15. if(available.size() == 0) return -1;
  16. // return 1 number
  17. else {
  18. int number = available.poll();
  19. set.add(number);
  20. return number;
  21. }
  22. }
  23. /** Check if a number is available or not. */
  24. public boolean check(int number) {
  25. return !set.contains(number);
  26. }
  27. /** Recycle or release a number. */
  28. public void release(int number) {
  29. if(number >= 0 && number < maxNum) {
  30. if(set.remove(number)) available.add(number);
  31. }
  32. }
  33. }

如果这道题要求get要求的是random的,那就和380. Insert Delete GetRandom O(1)一样了。
https://segmentfault.com/a/11…

发表评论

表情:
评论列表 (有 0 条评论,276人围观)

还没有评论,来说两句吧...

相关阅读