Googleインタビュー問題解決
11796 ワード
日符号化問題の解説
Quackは、スタックとキューの両方のプロパティを組み合わせたデータ構造です.3つの操作が可能であるように、左から右に書かれた要素のリストとして見ることができます.
JavaScriptのソリューション
プッシュとPOPは既にリスト操作としてサポートされています.リスト操作は実際に右からアイテムを削除します.
プルは、最初の項目を削除するようにトリッキーになりますO(n)操作されるリスト内のすべての他の項目を移動する必要があります.
我々は、DEC(ダブルエンドキュー)を利用することができます.キューの種類を削除することができますし、フロントからの項目だけでなく、バック.ですから、DECKをスタックとキューとして使用することができます.ここでDequeについてもっと読むことができます.DECは、一般的に、2つのデータ構造、すなわち、円形配列、2重連結リストを用いて作成される.
しかし、我々の解決のために、我々はスタックでdequeをつくる必要があります.
つの方法は3つのスタックを持つことです.
プッシュ
我々は直接左からアイテムを追加することができますし、我々は動的なJavaScriptの配列を使用しているように我々はQuackの上限を心配する必要はありませんか、または我々は左のスタックを言うことができます.
ポップ
私たちが左の配列にアイテムを持っているならば、我々は単にこのように開くことができます
しかし、我々のケースでは、我々が我々の右のリストでアイテムを持っているかどうかチェックする必要があります.
例:
このためには、スタックの左にスタックの右側の項目の半分を移動する必要があります
プル操作に関しては、右の配列にアイテムを持っていない場合には、Quickのバランスをとる必要があります.
フルコードです
class Quack {
constructor(left = [], right = []) {
this.left = left;
this.right = right;
this.buffer = [];
}
print() {
console.log(this.left, this.right);
}
push(newItem) {
this.left.push(newItem);
}
pop() {
if (this.left.length <= 0 && this.right.length <= 0) {
console.log("Quack is already Empty");
return;
}
if (this.left.length === 0) this.balance(this.right, this.left);
this.left.pop();
}
pull() {
if (this.left.length <= 0 && this.right.length <= 0) {
console.log("Quack is already Empty");
return;
}
if (this.right.length === 0) this.balance(this.left, this.right);
this.right.pop();
}
balance(from, to) {
const length = from.length;
const halfPoint = Math.floor(length / 2);
for (let i = 0; i < halfPoint; i++) {
this.buffer.push(from.pop());
}
while (from.length > 0) {
to.push(from.pop());
}
while (this.buffer.length > 0) {
from.push(this.buffer.pop());
}
}
}
const quack = new Quack();
quack.push(1);
quack.push(2);
quack.push(3);
quack.print();
quack.balance(quack.right, quack.left);
quack.print();
quack.pull();
quack.pop();
quack.pop();
quack.pull();
quack.print();
Reference
この問題について(Googleインタビュー問題解決), 我々は、より多くの情報をここで見つけました https://dev.to/sharansharma94/google-interview-problem-solution-ae2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol