Problem
You are given a stream of n videos, each represented by a distinct number from 1 to n that you need to "upload" to a server. You need to implement a data structure that calculates the length of the longest uploaded prefix at various points in the upload process.
We consider i to be an uploaded prefix if all videos in the range 1 to i (inclusive) have been uploaded to the server. The longest uploaded prefix is the **maximum **value of i that satisfies this definition.
Implement the LUPrefix class:
LUPrefix(int n)Initializes the object for a stream ofnvideos.void upload(int video)Uploadsvideoto the server.int longest()Returns the length of the longest uploaded prefix defined above.
Example 1:
Input
["LUPrefix", "upload", "longest", "upload", "longest", "upload", "longest"]
[[4], [3], [], [1], [], [2], []]
Output
[null, null, 0, null, 1, null, 3]
Explanation
LUPrefix server = new LUPrefix(4); // Initialize a stream of 4 videos.
server.upload(3); // Upload video 3.
server.longest(); // Since video 1 has not been uploaded yet, there is no prefix.
// So, we return 0.
server.upload(1); // Upload video 1.
server.longest(); // The prefix [1] is the longest uploaded prefix, so we return 1.
server.upload(2); // Upload video 2.
server.longest(); // The prefix [1,2,3] is the longest uploaded prefix, so we return 3.
Constraints:
1 <= n <= 10^51 <= video <= 10^5All values of
videoare distinct.At most
2 * 10^5calls in total will be made touploadandlongest.At least one call will be made to
longest.
Solution (Java)
class LUPrefix {
Integer[] prefix;
int index = 0;
public LUPrefix(int n) {
prefix = new Integer[n];
}
public void upload(int video) {
prefix[video - 1] = 1;
while(index < prefix.length && prefix[index] != null){
index++;
}
}
public int longest() {
return index;
}
}
/**
* Your LUPrefix object will be instantiated and called as such:
* LUPrefix obj = new LUPrefix(n);
* obj.upload(video);
* int param_2 = obj.longest();
*/
Explain:
nope.
Complexity:
- Time complexity : O(n).
- Space complexity : O(n).