Design an Ordered Stream - Array - Easy - LeetCode
💻 coding

Design an Ordered Stream - Array - Easy - LeetCode

2 min read 333 words
2 min read
ShareWhatsAppPost on X
  • 1The OrderedStream class manages a stream of (id, value) pairs, allowing insertion in arbitrary order.
  • 2The insert method returns values in increasing order of ids, updating a pointer to track the next expected id.
  • 3The implementation ensures efficient storage and retrieval with a time complexity of O(n) and space complexity of O(n).

AI-generated summary · May not capture all nuances

Key Insight
AskGif

"The OrderedStream class manages a stream of (id, value) pairs, allowing insertion in arbitrary order."

Design an Ordered Stream - Array - Easy - LeetCode

There are n (id, value) pairs, where id is an integer between 1 and n and value is a string. No two pairs have the same id.

Design a stream that takes the n pairs in an arbitrary order, and returns the values over several calls in increasing order of their ids.

Implement the OrderedStream class:

OrderedStream(int n) Constructs the stream to take n values and sets a current ptr to 1. String[] insert(int id, String value) Stores the new (id, value) pair in the stream. After storing the pair: If the stream has stored a pair with id = ptr, then find the longest contiguous incrementing sequence of ids starting with id = ptr and return a list of the values associated with those ids in order. Then, update ptr to the last id + 1. Otherwise, return an empty list.

Example:

Input ["OrderedStream", "insert", "insert", "insert", "insert", "insert"] [[5], [3, "ccccc"], [1, "aaaaa"], [2, "bbbbb"], [5, "eeeee"], [4, "ddddd"]] Output [null, [], ["aaaaa"], ["bbbbb", "ccccc"], [], ["ddddd", "eeeee"]]

Explanation OrderedStream os= new OrderedStream(5); os.insert(3, "ccccc"); // Inserts (3, "ccccc"), returns []. os.insert(1, "aaaaa"); // Inserts (1, "aaaaa"), returns ["aaaaa"]. os.insert(2, "bbbbb"); // Inserts (2, "bbbbb"), returns ["bbbbb", "ccccc"]. os.insert(5, "eeeee"); // Inserts (5, "eeeee"), returns []. os.insert(4, "ddddd"); // Inserts (4, "ddddd"), returns ["ddddd", "eeeee"].

Constraints:

1 <= n <= 1000 1 <= id <= n value.length == 5 value consists only of lowercase letters. Each call to insert will have a unique id. Exactly n calls will be made to insert.

public class OrderedStream {
 string[] strArr;
 int ptr = 0;
 public OrderedStream(int n) {
 strArr = new string[n];
 }
 
 public IList<string> Insert(int id, string value) {
 id = id-1;
 strArr[id]=value;
 var result = new List<string>();
 if(ptr==id){
 while(ptr < strArr.Length && strArr[ptr]!=null){
 result.Add(strArr[ptr]);
 ptr++;
 }
 }
 
 return result;
 }
}

/**
 * Your OrderedStream object will be instantiated and called as such:
 * OrderedStream obj = new OrderedStream(n);
 * IList<string> param_1 = obj.Insert(id,value);
 */

Time Complexity: O(n)

Space Complexity: O(n)

Enjoyed this article?

Share it with someone who'd find it useful.

ShareWhatsAppPost on X

sumitc91

Published on 16 November 2020 · 2 min read · 333 words

Part of AskGif Blog · coding

You might also like