1656. 設計有序流(C++)
- 1 題目描述
- 2 示例描述
- 3 解題提示
- 4 原始碼詳解(C++)
1 題目描述
有 n 個 (id, value) 對,其中 id 是 1 到 n 之間的一個整數,value 是一個字串,不存在 id 相同的兩個 (id, value) 對,
設計一個流,以 任意 順序獲取 n 個 (id, value) 對,并在多次呼叫時 按 id 遞增的順序 回傳一些值,
實作 OrderedStream 類:
- OrderedStream(int n) 構造一個能接收 n 個值的流,并將當前指標 ptr 設為 1 ,
- String[] insert(int id, String value) 向流中存盤新的 (id, value) 對,存盤后:
- 如果流存盤有 id = ptr 的 (id, value) 對,則找出從 id = ptr 開始的 最長 id 連續遞增序列 ,并 按順序 回傳與這些 id 關聯的值的串列,然后,將 ptr 更新為最后那個 id + 1 ,
- 否則,回傳一個空串列,
2 示例描述
輸入
[“OrderedStream”, “insert”, “insert”, “insert”, “insert”, “insert”]
[[5], [3, “ccccc”], [1, “aaaaa”], [2, “bbbbb”], [5, “eeeee”], [4, “ddddd”]]
輸出
[null, [], [“aaaaa”], [“bbbbb”, “ccccc”], [], [“ddddd”, “eeeee”]]
解釋
OrderedStream os= new OrderedStream(5);
os.insert(3, “ccccc”); // 插入 (3, “ccccc”),回傳 []
os.insert(1, “aaaaa”); // 插入 (1, “aaaaa”),回傳 [“aaaaa”]
os.insert(2, “bbbbb”); // 插入 (2, “bbbbb”),回傳 [“bbbbb”, “ccccc”]
os.insert(5, “eeeee”); // 插入 (5, “eeeee”),回傳 []
os.insert(4, “ddddd”); // 插入 (4, “ddddd”),回傳 [“ddddd”, “eeeee”]
3 解題提示
- 1 <= n <= 1000
- 1 <= id <= n
- value.length == 5
- value 僅由小寫字母組成
- 每次呼叫 insert 都會使用一個唯一的 id
- 恰好呼叫 n 次 insert
4 原始碼詳解(C++)
class OrderedStream {
public:
int ptr = 1 ;
vector<string> data ;
OrderedStream(int n) {
for (int i = 0 ; i < n + 2 ; i ++ )
{
data.push_back("");
}
}
vector<string> insert(int idKey, string value) {
data[idKey] = value ;
vector<string> res ;
while(data[ptr] != "" )
{
res.push_back(data[ptr]);
ptr ++ ;
}
return res;
}
};
/**
* Your OrderedStream object will be instantiated and called as such:
* OrderedStream* obj = new OrderedStream(n);
* vector<string> param_1 = obj->insert(idKey,value);
*/
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/263713.html
標籤:其他
上一篇:與eolinker api集成

