Skip to content

Commit 5609361

Browse files
authored
Create design-phone-directory.cpp
1 parent 21cd6dc commit 5609361

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

C++/design-phone-directory.cpp

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
// init: Time: O(n), Space: O(n)
2+
// get: Time: O(1), Space: O(1)
3+
// check: Time: O(1), Space: O(1)
4+
// release: Time: O(1), Space: O(1)
5+
6+
class PhoneDirectory {
7+
public:
8+
/** Initialize your data structure here
9+
@param maxNumbers - The maximum numbers that can be stored in the phone directory. */
10+
PhoneDirectory(int maxNumbers) :
11+
curr_(0), numbers_(maxNumbers), used_(maxNumbers) { // Time: O(n), Space: O(n)
12+
13+
iota(numbers_.begin(), numbers_.end(), 0);
14+
}
15+
16+
/** Provide a number which is not assigned to anyone.
17+
@return - Return an available number. Return -1 if none is available. */
18+
int get() { // Time: O(1), Space: O(1)
19+
if (curr_ == numbers_.size()) {
20+
return -1;
21+
}
22+
const auto number = numbers_[curr_++];
23+
used_[number] = true;
24+
return number;
25+
}
26+
27+
/** Check if a number is available or not. */
28+
bool check(int number) { // Time: O(1), Space: O(1)
29+
if (number < 0 || number >= numbers_.size()) {
30+
return false;
31+
}
32+
return !used_[number];
33+
}
34+
35+
/** Recycle or release a number. */
36+
void release(int number) { // Time: O(1), Space: O(1)
37+
if (number < 0 || number >= numbers_.size() || !used_[number]) {
38+
return;
39+
}
40+
used_[number] = false;
41+
numbers_[--curr_] = number ;
42+
}
43+
44+
private:
45+
int curr_;
46+
vector<int> numbers_;
47+
vector<bool> used_;
48+
};
49+
50+
/**
51+
* Your PhoneDirectory object will be instantiated and called as such:
52+
* PhoneDirectory obj = new PhoneDirectory(maxNumbers);
53+
* int param_1 = obj.get();
54+
* bool param_2 = obj.check(number);
55+
* obj.release(number);
56+
*/

0 commit comments

Comments
 (0)