Skip to content

Latest commit

 

History

History
110 lines (73 loc) · 2.52 KB

379. Design-Phone-Directory.md

File metadata and controls

110 lines (73 loc) · 2.52 KB

Description

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);

python solution

很烂的一道题目。感觉很容易就坑住别人。

我的思路是这样的:

  • 用一个列表代表电话号码

  • 永远get()掉最小值(头部的值)。所以要保证列表永远有序。

  • check操作即判断某个元素在不在列表中

  • release操作要注意先判断这个元素在不在列表中,如果在,就不用添加;如果不在,把这个元素添加到列表中,**再对列表排一次序!**这样保证列表永远有序。

class PhoneDirectory(object):

    def __init__(self, maxNumbers):
        """
        Initialize your data structure here
        @param maxNumbers - The maximum numbers that can be stored in the phone directory.
        :type maxNumbers: int
        """
        self.arr = list(range(maxNumbers))


    def get(self):
        """
        Provide a number which is not assigned to anyone.
        @return - Return an available number. Return -1 if none is available.
        :rtype: int
        """
        if self.arr:
            return self.arr.pop(0)
        else:
            return -1


    def check(self, number):
        """
        Check if a number is available or not.
        :type number: int
        :rtype: bool
        """
        return number in self.arr


    def release(self, number):
        """
        Recycle or release a number.
        :type number: int
        :rtype: void
        """
        if number not in self.arr:
            self.arr.append(number)
            self.arr.sort()



# Your PhoneDirectory object will be instantiated and called as such:
# obj = PhoneDirectory(maxNumbers)
# param_1 = obj.get()
# param_2 = obj.check(number)
# obj.release(number)