[LeetCode] 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);
 */

おすすめ

転載: blog.csdn.net/Gyangxixi/article/details/114092982