leetcode三数之和python,leetcode简单题有多少道
如果你对排队有疑问,请查看上一篇在线博客。这是Java中描述数据结构栈和队列的方法,也是栈和队列的常用方法。
如果存储队列的空间大小固定,则:
前面是组长,后面是组长。很明显,这个空间已经满了。现在,按顺序删除团队领导的元素:
可以看到,队列中的元素越少,未使用的空间就越大,总空间的大小也是一样的,所以最后一个空间已经被放弃了。
为了让这个空间可持续发展,我们可以这样做。
通过在每次删除头时将队列中的所有元素向前移动,可以很好地解决这个问题,并且可以完美地提高空间利用率。但是每删除一个元素的第一次,后续元素按顺序的操作无疑会增加时间的复杂度。
所以为了降低时间复杂度,设置了一个检测队列大小和数组大小关系的代码,只有满足这个条件,才依次执行有效数据,这样就不需要每次删除头都往前走,可以在一定程度上降低时间复杂度。
当然,还有另一种解决方法。也就是说,我们不需要把元素往前推。只需改变下面首尾相连的指针(显示为指针)的用法,使队列在逻辑上看起来像一个环。这就是我们今天的主角3354循环队列。
这是一个用于添加元素的空队列。以下循环队列图的后方方向是错误的。Rear必须指向队列末尾的下一个,也就是空的第一个。
继续补充:
现在队列已满。我们从标题中删除元素:
你可以看到,在我们删除头之后,队列需要大量的空间来插入新元素,并且它不需要元素向前移动。那么,如何实现这个逻辑上是环境的循环队列呢?如果能更灵活地使用头尾指针就好了。
结合LeetCode问题622
李特代码622。
我来解释一下具体实现。
公共mycircularlqueue {//array为循环队列实现了特殊的int[]queue array;//记录private int frontIndex组队之初;//一个私有的内部阅读索引,记录球队最后的位置;记录//队列长度private intsize//构造方法publicmycurlqueue(intk)){ queue array=newint[k];前端索引=0;rear index=0;大小=0;//新元素public boolean enqueue(int value)if)size==queue array . length){ return false;}队列数组[rear index]=value;尺寸;rear index=(rear index 1)% queue array . length;返回true//元素公共布尔队列()if)size==0)){返回false} front index=(front index 1)% queue array . length;尺寸-;返回true//从队首获取元素,队列为空时为-1 public int front()if)size==0){ return-1;}返回队列数组[前端索引];(//获取队列结束元素,如果队列为空则为-1公共内部读取))if)size==0){ Return-1;//rearIndex总是指向第一个空的下标,所以//要获取结束元素,必须在rearIndex之前获取下标中的元素。//后方索引=(后方索引=)//public Boolean ISEMPTY(){ return size==0;//队列是public boolean is full(){ return size==queue array . length;}上面简单介绍了循环及其实现。如果理解有偏差,请参考评论部分。谢谢你
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。