1656.順序付けられたフローを設計する(C ++)
1つのトピックの説明
n(id、value)のペアがあります。ここで、idは1からnまでの整数で、valueは文字列です。同じIDを持つ2つの(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"、 "挿入"、 "挿入"、 "挿入"、 "挿入"、 "挿入"]
[5]、[3、 "CCCCC"]、[1、 "AAAAA"]、[2、 "Bbbbb"]、[5、 "eeeee"]、[4、 "ddddd"]]
出力
[null、[]、["aaaaa"]、["bbbbb"、 "ccccc"]、[]、["ddddd "、" eeeee "]]
Explain
OrderedStream os = new OrderedStream(5);
os.insert(3、“ ccccc”); // insert(3、“ ccccc”)、return []
os.insert(1、“ aaaaa ”); // Insert(1
、“ aaaaa”)、return [“ aaaaa” ] os.insert(2、“ bbbbb”); // Insert(2、“ bbbbb”)、return [“ bbbbb”、“ ccccc ”]
os.insert(5、“ eeeee”); // insert(5、“ eeeee”)、return []
os.insert(4、“ ddddd”); // insert(4、“ ddddd”)、return ["Ddddd"、 "eeeee"]
3問題解決のヒント
- 1 <= n <= 1000
- 1 <= id <= n
- value.length == 5
- 値は小文字のみで構成されます
- 挿入の各呼び出しは一意のIDを使用します
- インサートを正確にn回呼び出す
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);
*/