You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
/** * Initialize your data structure here. Set the size of the deque to be k. * @param {number} k */varMyCircularDeque=function(k){// 队列的容量this.capacity=k;// 使用数组存放队列元素,所有的初始值都是-1,取值的时候直接返回this.queue=newArray(k).fill(-1);// 队列的头指针,即队列头元素的位置this.head=0;// 队列的尾指针,即尾部要插入元素的位置,也就是队列的尾元素的位置+1this.tail=0;};// 将index-1,需要考虑index到达数组首尾时需要循环MyCircularDeque.prototype.reduceIndex=function(index){return(index+this.capacity-1)%this.capacity;};// 将index+1,需要考虑index到达数组首尾时需要循环MyCircularDeque.prototype.addIndex=function(index){return(index+1)%this.capacity;};/** * 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.isFull()){returnfalse;}// 从头部插入元素时,要先将头指针向前移动一位this.head=this.reduceIndex(this.head);// 在新的头指针位置插入元素this.queue[this.head]=value;returntrue;};/** * 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.isFull()){returnfalse;}// 在尾指针的位置插入元素this.queue[this.tail]=value;// 将尾指针向后移动一位,指向下一次插入元素的位置this.tail=this.addIndex(this.tail);returntrue;};/** * Deletes an item from the front of Deque. Return true if the operation is successful. * @return {boolean} */MyCircularDeque.prototype.deleteFront=function(){// 判断队列是否为空if(this.isEmpty()){returnfalse;}// 将头指针的值置为-1,表示元素被删除this.queue[this.head]=-1;// 删除元素后,要将头指针向后移动一位this.head=this.addIndex(this.head);returntrue;};/** * Deletes an item from the rear of Deque. Return true if the operation is successful. * @return {boolean} */MyCircularDeque.prototype.deleteLast=function(){// 判断队列是否为空if(this.isEmpty()){returnfalse;}// 先将尾指针向前移动一位,指向队尾元素this.tail=this.reduceIndex(this.tail);// 将队尾元素设置为-1this.queue[this.tail]=-1;returntrue;};/** * Get the front item from the deque. * @return {number} */MyCircularDeque.prototype.getFront=function(){// 直接返回头指针的元素即可,由于初始值是-1,因此如果队列为空,会返回-1returnthis.queue[this.head];};/** * Get the last item from the deque. * @return {number} */MyCircularDeque.prototype.getRear=function(){// 直接返回尾指针-1的元素即可,由于初始值是-1,因此如果队列为空,会返回-1returnthis.queue[this.reduceIndex(this.tail)];};/** * Checks whether the circular deque is empty or not. * @return {boolean} */MyCircularDeque.prototype.isEmpty=function(){// 如果头尾指针的位置相同,且对应位置的值为-1,表示队列中已无元素,则为空returnthis.head===this.tail&&this.queue[this.head]<0;};/** * Checks whether the circular deque is full or not. * @return {boolean} */MyCircularDeque.prototype.isFull=function(){// 如果头尾指针的位置相同,且对应位置的值不为-1,此时无法再插入元素,则队列已满returnthis.head===this.tail&&this.queue[this.head]>=0;};
The text was updated successfully, but these errors were encountered:
原题链接:641. 设计循环双端队列
解题思路:
如果你看到这题的时候,感到没有思路,可以先尝试其前导题目:622. 设计循环队列,以及我的题解LeetCode题解:622. 设计循环队列,使用数组,JavaScript,详细注释。
创建数组:
插入元素:
判断队列为空或已满:
在默认用例通过后,可以补充测试如下两个用例,如果都能通过,那么这题基本就没问题了。
["MyCircularDeque","insertFront","getRear","insertFront","getRear","insertLast","getFront","getRear","getFront","insertLast","deleteLast","getFront"]\n[[3],[9],[],[9],[],[5],[],[],[],[8],[],[]]
["MyCircularDeque","insertFront","deleteLast","getRear","getFront","getFront","deleteFront","insertFront","insertLast","insertFront","getFront","insertFront"]\n[[4],[9],[],[],[],[],[],[6],[5],[9],[],[6]]
The text was updated successfully, but these errors were encountered: