classPhoneDirectory { public: unordered_map<int, list<int>::iterator > setting; list<int> lis; /** Initialize your data structure here @param maxNumbers - The maximum numbers that can be stored in the phone directory. */ PhoneDirectory(int maxNumbers) { for (int i = 0; i < maxNumbers; ++i) { lis.push_back(i); setting[i] = lis.begin(); } } /** Provide a number which is not assigned to anyone. @return - Return an available number. Return -1 if none is available. */ intget(){ if (lis.empty()) return-1; int ret = *(lis.begin()); setting.erase(ret); lis.pop_front(); return ret; } /** Check if a number is available or not. */ boolcheck(int number){ return setting.find(number) != setting.end(); } /** Recycle or release a number. */ voidrelease(int number){ if (setting.count(number) != 0) return; lis.push_front(number); setting[number] = lis.begin(); } };
/** * Your PhoneDirectory object will be instantiated and called as such: * PhoneDirectory obj = new PhoneDirectory(maxNumbers); * int param_1 = obj.get(); * bool param_2 = obj.check(number); * obj.release(number); */