問題#2:ITトレーニング-主要企業の現在の問題と課題

今週、 Uberがインタビューで提供するタスクと質問のセレクションを公開しています。 誰もが興味を持つように、タスクは「簡単」から「難しい」まで異なるレベルの難易度を取り上げました。 条件は英語で表示されます。



前回と同様、返信は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]」として、バイナリツリーをシリアル化します。 必ずしもこの形式に従う必要はありませんので、創造的であり、さまざまなアプローチを自分で考えてください。

注:クラスメンバー/グローバル/静的変数を使用して状態を保存しないでください。 シリアライズおよびデシリアライズのアルゴリズムはステートレスでなければなりません。




All Articles