LeetCodeのJavaScriptは第641題を解答します.デュアルエンド行列を設計します.
7086 ワード
Time:2019/4/15 Title:Design Circur Deque Difficulty:Medium Author:小鹿
タイトル:Design Circur Deque
Design your implemenation of the circur double-ended queue.
Your implementation shoult support follwing operation s: デザインはダブルエンドキューを実現します.あなたの実現には以下の操作をサポートする必要があります. MyCurularDeque(k):コンストラクタ、二重端列の大きさはkです. insertFront():1つの要素を2つの端列の先頭に追加します.操作が成功すればtrueに戻ります. insertLast():1つの要素を2つのエンドキューの末尾に追加します.操作が成功すればtrueに戻ります. deleteFront():二重端列の先頭から要素を削除します.操作が成功すればtrueに戻ります. deleteLast():二重端列の末尾から要素を削除する.操作が成功すればtrueに戻ります. get Front():二重端列の先頭から要素を得る.ダブルエンドの列が空の場合は、-1を返します. getRear():二重端列の最後の要素を得る.ダブルエンドの列が空の場合は、-1を返します. isEmpty():双端列が空かどうかを確認します. isFull():双端列がいっぱいかどうかを確認します. Example: All values will be in the range of[0,1000]. The number of operations will be in the range of[1,000]. Please dot use the built-in Deque library. Solve:
πアルゴリズムの考え方
Javascriptの配列中のAPIによって、双方向の列が急速に実現され得る.例えば: 以上の配列が提供するAPIは、配列を動作させ、他のデータ構造の動作をシミュレートするのに便利である.スタック、キューなど.
πコード実現
Github:https://github.com/luxiangqiang/JS-LeetCode
私の個人番号に注目してください.「平凡に甘んじない私たち」は自分でプログラミングした物語を記録しました.
タイトル:Design Circur Deque
Design your implemenation of the circur double-ended queue.
Your implementation shoult support follwing operation s:
MyCircularDeque(k)
:コンストラクタ、set the size of the deque to be k.insertFront()
:Adds an item the front of Deque.Return true if the operation is success ful.insertLast()
:Adds an item the rear of Deque.Return true if the operation is success ful.deleteFront()
:Deletes and from the from of Deque.Return true if the operation is success ful.deleteLast()
:Deletes an item from the rear of Deque.Return true if the operation is success ful.getFront()
:Gets the front item from the Deque.If the deque is empty,return-1.getRear()
:Gets the last item from Deque.If the deque is empty,return-1.isEmpty()
:Checks whether Deque is empty or not.isFull()
:Checks whether Deque is full or not.MyCircularDeque circularDeque = new MycircularDeque(3); // set the size to be 3
circularDeque.insertLast(1); // return true
circularDeque.insertLast(2); // return true
circularDeque.insertFront(3); // return true
circularDeque.insertFront(4); // return false, the queue is full
circularDeque.getRear(); // return 2
circularDeque.isFull(); // return true
circularDeque.deleteLast(); // return true
circularDeque.insertFront(4); // return true
circularDeque.getFront(); // return 4
ノート:πアルゴリズムの考え方
Javascriptの配列中のAPIによって、双方向の列が急速に実現され得る.例えば:
arr.pop()
:配列の最後のデータを削除する.arr.push()
:配列の最後にデータを挿入する.arr.shift()
:配列ヘッドが最初のデータを削除する.arr.unshift()
:配列ヘッドにデータを挿入する.πコード実現
//
var MyCircularDeque = function(k) {
this.deque = [];
this.size = k;
};
/**
* Adds an item at the front of Deque. Return true if the operation is successful.
* @param {number} value
* @return {boolean}
* :
*/
MyCircularDeque.prototype.insertFront = function(value) {
if(this.deque.length === this.size){
return false;
}else{
this.deque.unshift(value);
return true;
}
};
/**
* Adds an item at the rear of Deque. Return true if the operation is successful.
* @param {number} value
* @return {boolean}
* :
*/
MyCircularDeque.prototype.insertLast = function(value) {
if(this.deque.length === this.size){
return false;
}else{
this.deque.push(value);
return true;
}
};
/**
* Deletes an item from the front of Deque. Return true if the operation is successful.
* @return {boolean}
* :
*/
MyCircularDeque.prototype.deleteFront = function() {
if(this.deque.length === 0){
return false;
}else{
this.deque.shift();
return true;
}
};
/**
* Deletes an item from the rear of Deque. Return true if the operation is successful.
* @return {boolean}
* :
*/
MyCircularDeque.prototype.deleteLast = function() {
if(this.deque.length === 0){
return false;
}else{
this.deque.pop();
return true;
}
};
/**
* Get the front item from the deque.
* @return {number}
* :
*/
MyCircularDeque.prototype.getFront = function() {
if(this.deque.length === 0){
return -1;
}else{
return this.deque[0];
}
};
/**
* Get the last item from the deque.
* @return {number}
* :
*/
MyCircularDeque.prototype.getRear = function() {
if(this.deque.length === 0){
return -1;
}else{
return this.deque[this.deque.length - 1];
}
};
/**
* Checks whether the circular deque is empty or not.
* @return {boolean}
* :
*/
MyCircularDeque.prototype.isEmpty = function() {
if(this.deque.length === 0){
return true;
}else{
return false;
}
};
/**
* Checks whether the circular deque is full or not.
* @return {boolean}
* :
*/
MyCircularDeque.prototype.isFull = function() {
if(this.deque.length === this.size){
return true;
}else{
return false;
}
};
//
var obj = new MyCircularDeque(3)
var param_1 = obj.insertFront(1)
var param_2 = obj.insertLast(2)
console.log('----------------------------- ------------------------')
console.log(`${param_1}${param_2}`)
var param_3 = obj.deleteFront()
var param_4 = obj.deleteLast()
console.log('----------------------------- ------------------------')
console.log(`${param_3}${param_4}`)
var param_5 = obj.getFront()
var param_6 = obj.getRear()
console.log('----------------------------- ------------------------')
console.log(`${param_5}${param_6}`)
var param_7 = obj.isEmpty()
var param_8 = obj.isFull()
console.log('----------------------------- / ------------------------')
console.log(`${param_7}${param_8}`)
LeetCodeオープンソースGithub倉庫に一緒に参加することを歓迎します.他の言語のコードを私に提出してもいいです.倉庫の上で堅持して子供達と一緒にカードを打って、共に私達の開源小倉庫を改善します!Github:https://github.com/luxiangqiang/JS-LeetCode
私の個人番号に注目してください.「平凡に甘んじない私たち」は自分でプログラミングした物語を記録しました.