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:
  • 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.
  • デザインはダブルエンドキューを実現します.あなたの実現には以下の操作をサポートする必要があります.
  • MyCurularDeque(k):コンストラクタ、二重端列の大きさはkです.
  • insertFront():1つの要素を2つの端列の先頭に追加します.操作が成功すればtrueに戻ります.
  • insertLast():1つの要素を2つのエンドキューの末尾に追加します.操作が成功すればtrueに戻ります.
  • deleteFront():二重端列の先頭から要素を削除します.操作が成功すればtrueに戻ります.
  • deleteLast():二重端列の末尾から要素を削除する.操作が成功すればtrueに戻ります.
  • get Front():二重端列の先頭から要素を得る.ダブルエンドの列が空の場合は、-1を返します.
  • getRear():二重端列の最後の要素を得る.ダブルエンドの列が空の場合は、-1を返します.
  • isEmpty():双端列が空かどうかを確認します.
  • isFull():双端列がいっぱいかどうかを確認します.
  • Example:
    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
    
    ノート:
  • 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によって、双方向の列が急速に実現され得る.例えば:
  • arr.pop():配列の最後のデータを削除する.
  • arr.push():配列の最後にデータを挿入する.
  • arr.shift():配列ヘッドが最初のデータを削除する.
  • arr.unshift():配列ヘッドにデータを挿入する.
  • 以上の配列が提供するAPIは、配列を動作させ、他のデータ構造の動作をシミュレートするのに便利である.スタック、キューなど.
    πコード実現
     //      
            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
    私の個人番号に注目してください.「平凡に甘んじない私たち」は自分でプログラミングした物語を記録しました.