当前位置: 首页 > 知识库问答 >
问题:

如何在O(1)时间复杂度下删除堆栈的中间元素?

郭阳泽
2023-03-14

我用数组在GeeksforGeeks上试过这个问题。但是GeeksforGeeks中的解决方案说,我们必须使用链表来删除堆栈的中间元素,时间复杂度为O(1)。但我也有一个使用数组的解决方案,我想确认它是否正确。删除中间元素的解决方案是:-

    null

如果堆栈元素的no小于3,只需从堆栈中删除最上面的元素即可。我认为这个解决方案的时间复杂度也为O(1),因为这里没有循环运行。那么有人能说出这是不是这个问题的正确解决方案吗?

共有1个答案

谷梁昊空
2023-03-14

我想你指的是这个谜题。您的方法改变了元素的顺序。例如,如果堆栈是

1 2 3 4 5 6 7

(1在底部,7在顶部),然后在步骤2之后,我们有

这不是我们想要的(我们想要1 2 3 5 6 7)。

此外,您的方法打破了难题提出的抽象,即只使用堆栈操作push()pop()empty()。您不应该直接访问基础数组。话说回来,当它使用递归时,这个谜题打破了它自己的抽象。递归有它自己的堆栈,它实际上是一种附加的数据结构。

 类似资料:
  • 问题内容: 我打算对StringBuilders中的最后一个字符进行很多删除。使用的解决方案对我来说很好。但是,由于这些删除将处于循环中,因此我需要知道其复杂性。 据我了解,该操作只是减少了StringBuilder对象的一些私有属性,并且不对字符本身执行任何复制/克隆/复制操作,因此它的时间为O(1),应该可以快速运行。 我对吗? 问题答案: 从文档中: 设置字符序列的长度。序列更改为新的字符序

  • 我不明白堆排序的空间复杂度是怎样的O(1)?虽然快速排序不使用任何额外的数组(即就地),但在最坏情况下其空间复杂度为O(n),在最佳情况下为O(lg n),因为在递归调用的后端使用堆栈。我说得对吗? 堆排序也是如此。虽然,它是就地的,但是由于Build-Heap函数调用Max-Heapify函数,所以它的空间复杂度应该等于Max-Heapify,即O(lg n)。不是吗?此外,稍后在根节点调用Ma

  • 这个问题的正确答案是O(N)。但根据我的说法,答案应该是O(NlogN)。因为第一个“for循环”的复杂度应该是O(logN),因为在每次迭代中变量i被2除,而且我已经研究过,每当循环变量被2乘或除,那么时间复杂度就是O(logN)。现在,对于第二个“for循环”,复杂度应该是O(N),因此,最后一个复杂度应该是O(N*logn)。 谁能解释一下我错在哪里吗?

  • 给定一个整数数组arr,计算元素x,使得x 1也在arr中。如果arr中有重复项,请分别计数。 示例1:输入:arr=[1,2,3]输出:2说明:1和2被计数,因为2和3在arr中。 示例2:输入:arr=[1,1,2]输出:2解释:1计数两次,原因2在arr中。 示例3:输入:arr=[1,1,3,3,5,5,7,7]输出:0说明:没有计算数字,因为arr中没有2、4、6或8。 示例4:输入:a

  • 我在Java中使用2个堆栈实现了一个队列,我遵循以下算法: 排队(x) 将x推到堆栈1 deQueue() 1)如果两个堆栈都为空,则返回错误 2)如果stack2为空,而stack1不为空,则将所有内容从stack1推到stack2 3)从stack2弹出元素并返回它。 现在,这里的问题是第一个操作非常慢(因为它将所有内容传输到)。我们可以修改算法,使总是O(1)吗?还有其他选择吗?

  • 主要内容:时间复杂度,空间复杂度《 算法是什么》一节提到,解决一个问题的算法可能有多种,这种情况下,我们就必须对这些算法进行取舍,从中挑选出一个“最好”的。 算法本身是不分“好坏”的,所谓“最好”的算法,指的是最适合当前场景的算法。挑选算法时,主要考虑以下两方面因素: 执行效率:根据算法所编写的程序,执行时间越短,执行效率就越高; 占用的内存空间:不同算法编写出的程序,运行时占用的内存空间也不相同。如果实际场景中仅能使用少量的内