LeetCode1656。順序付けられたフローを設計する

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に更新します。
それ以外の場合は、空のリストが返されます。

例:
入力
["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”); // Insert(3、“ ccccc”)、return []
os.insert(1、“ aaaaa”); // Insert( 1、 "
aaaaa")、return ["aaaaa" ] os.insert(2、 "bbbbb"); //挿入(2、 "bbbbb")、return ["bbbbb"、 "ccccc"]
os.insert(5 、“ eeeee”); // Insert(5、“ eeeee”)、return []
os.insert(4、“ ddddd”); // Insert(4、“ ddddd”)、return [“ ddddd”、“ eeeee 」]

アイデアは、挿入のたびにptrが指す位置に要素があるかどうかを確認し、ある場合は、その要素とその後の連続する要素を返し、ptrを追加することです。

class OrderedStream {
    
    
public:
    OrderedStream(int n) {
    
    
        svec.resize(n + 1);
    }
    
    vector<string> insert(int id, string value) {
    
    
        vector<string> ret;

        svec[id] = value;

        while (1) {
    
    
            if (svec.size() == ptr || svec[ptr].empty()) {
    
    
                break;
            }

            ret.push_back(svec[ptr]);
            ++ptr;
        }

        return ret;
    }

    vector<string> svec;
    int ptr = 1;
};

おすすめ

転載: blog.csdn.net/tus00000/article/details/112622418