前回と同様、返信は1週間以内に公開されます。 コメントに独自のソリューションを書いたらクールです)
質問:
1.世界の特定の地域で新しいUberサービスを開始し、その成功を知りたい場合、どのKPIを使用しますか?
2.取り組んでいたプロジェクトは失敗しましたか? 彼の失敗を防ぐために何かできますか?
タスク:
1。
プッシュ、ポップ、トップをサポートし、一定の時間で最小要素を取得するスタックを設計します。
push(x)-要素xをスタックにプッシュします。
pop()-スタックの一番上の要素を削除します。
top()-トップ要素を取得します。
getMin()-スタック内の最小要素を取得します。
例:
MinStack minStack = new MinStack(); minStack.push(-2); minStack.push(0); minStack.push(-3); minStack.getMin(); --> Returns -3. minStack.pop(); minStack.top(); --> Returns 0. minStack.getMin(); --> Returns -2.
2。
以下のすべての操作を平均O(1)時間でサポートするデータ構造を設計します。
insert(val):まだ存在しない場合、セットにアイテムvalを挿入します。
remove(val):セットからアイテムvalを削除します(存在する場合)。
getRandom:現在の要素セットからランダムな要素を返します。 各要素は、返される確率が同じでなければなりません。
例:
// Init an empty set. RandomizedSet randomSet = new RandomizedSet(); // Inserts 1 to the set. Returns true as 1 was inserted successfully. randomSet.insert(1); // Returns false as 2 does not exist in the set. randomSet.remove(2); // Inserts 2 to the set, returns true. Set now contains [1,2]. randomSet.insert(2); // getRandom should return either 1 or 2 randomly. randomSet.getRandom(); // Removes 1 from the set, returns true. Set now contains [2]. randomSet.remove(1); // 2 was already in the set, so return false. randomSet.insert(2); // Since 2 is the only number in the set, getRandom always return 2. randomSet.getRandom();
3。
シリアル化は、データ構造またはオブジェクトをビットシーケンスに変換して、ファイルまたはメモリバッファーに格納したり、ネットワーク接続リンクを介して送信したり、後で同じまたは別のコンピューター環境で再構築したりするプロセスです。
バイナリツリーをシリアル化および逆シリアル化するアルゴリズムを設計します。 シリアル化/逆シリアル化アルゴリズムの動作に制限はありません。 バイナリツリーを文字列にシリアル化し、この文字列を元のツリー構造に逆シリアル化できることを確認する必要があります。
たとえば、次のツリーをシリアル化できます
1
/ \
2 3
/ \
4 5
「[1,2,3、null、null、4,5]」として、バイナリツリーをシリアル化します。 必ずしもこの形式に従う必要はありませんので、創造的であり、さまざまなアプローチを自分で考えてください。
注:クラスメンバー/グローバル/静的変数を使用して状態を保存しないでください。 シリアライズおよびデシリアライズのアルゴリズムはステートレスでなければなりません。