Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitea1cf12

Browse files
optimize phone directory to O(1) get() time
1 parent84c0414 commitea1cf12

File tree

1 file changed

+47
-1
lines changed

1 file changed

+47
-1
lines changed

‎MEDIUM/src/medium/PhoneDirectory.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
packagemedium;
22

3-
publicclassPhoneDirectory {
3+
importjava.util.HashSet;
4+
importjava.util.LinkedList;
5+
importjava.util.Queue;
6+
importjava.util.Set;
47

8+
publicclassPhoneDirectory {
9+
//this runs in 669 ms, its get() method is O(n)
510
boolean[]availableNumbers;
611

712
/** Initialize your data structure here
@@ -36,3 +41,44 @@ public void release(int number) {
3641
}
3742

3843
}
44+
45+
classPhoneDirectory_use_set {
46+
//this runs in 532 ms, its get() method is O(1)
47+
48+
Queue<Integer>phoneBooks;
49+
Set<Integer>used;
50+
51+
/** Initialize your data structure here
52+
@param maxNumbers - The maximum numbers that can be stored in the phone directory. */
53+
publicPhoneDirectory_use_set(intmaxNumbers) {
54+
phoneBooks =newLinkedList<Integer>();
55+
intnumber =0;
56+
while(maxNumbers-- >0){
57+
phoneBooks.add(number++);
58+
}
59+
used =newHashSet<Integer>();
60+
}
61+
62+
/** Provide a number which is not assigned to anyone.
63+
@return - Return an available number. Return -1 if none is available. */
64+
publicintget() {
65+
if(phoneBooks.peek() ==null)return -1;
66+
intnumber =phoneBooks.poll();
67+
used.add(number);
68+
returnnumber;
69+
}
70+
71+
/** Check if a number is available or not. */
72+
publicbooleancheck(intnumber) {
73+
return !used.contains(number);
74+
}
75+
76+
/** Recycle or release a number. */
77+
publicvoidrelease(intnumber) {
78+
if(used.remove(number)){
79+
phoneBooks.add(number);
80+
}
81+
}
82+
83+
84+
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp