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

Java:递归查找堆栈中的最小元素

连翰
2023-03-14
public static void removeMin(Stack<Integer> st)
{
    if (st.isEmpty())
        return;
    int min = st.pop();
    removeMin(st);
    if(min<st.top())
        return;
    st.push(min);
}

我试图找到最小元素并删除它,但不幸的是我不能。我想得到一些帮助,这是我的代码。

我在Class Stack中只有这些方法:equals,is空,pop,推送,top,toString(主要方法)。

提前感谢。

共有2个答案

汪博艺
2023-03-14

我测试了你的方法。你换了两行。您所需要做的就是在测试之后进行递归调用。

public static void removeMin(Stack<Integer> st) {
    if (st == null || st.isEmpty())
        return;
    int min = st.pop();
    if(min<st.firstElement())
        return;
    removeMin(st); // this was in the wrong place, causing the stack to empty out completely
    st.push(min);
}

我运行了这个例子:

public static void main (String[] args) {
    Stack<Integer> stack = new Stack<>();
    stack.add(2);
    stack.add(1); // to be removed
    stack.add(5);
    stack.add(3);
    stack.add(4);
    removeMin(stack);
    System.out.println(stack.toString());
}

并且它打印出了[2,5,3,4]

程天佑
2023-03-14

您必须将堆栈顶部与堆栈其余部分的最小元素进行比较。

那不是你在做的。您只是将堆栈的顶部与堆栈的下一个元素进行比较。

您可能应该更改递归方法以返回最小元素。通过这种方式,你可以与它进行比较:

public static int removeMin(Stack<Integer> st)
{
    if (st.isEmpty())
        return Integer.MAX_VALUE; // if the stack is empty, return a value that is larger 
                                  // than any other value
    int top = st.pop();
    int min = removeMin(st);
    if(top < min) {
        // top is the minimum element
        st.push(min);
        return top;
    } else {
        // min is the minimum element
        st.push(top);
        return min;
    }
}

我还没测试过。

 类似资料:
  • 问题内容: 我将以说这是家庭作业为开头。我只是在寻找一些指示。我一直在为此绞尽脑汁,对于我的一生,我只是不明白。我们被要求在列表中找到最小的元素。我知道我在这里需要一个子列表,但是在那之后我不确定。任何指针都很棒。谢谢。 问题答案: 从最一般的意义上讲,递归是一个基于分解工作的概念,然后将较小的工作分派给自己的副本。为了使递归正常工作,您需要三件事: 工作细目。您如何使每个步骤变得“简单”? 递归

  • 代码运行良好。只是我不明白。在递归部分有困难的。在此部分中:我的想法是,首先它将一直执行直到一个阈值。则它将执行一次。因此只会被赋值一次。显然那不是真的。 对我来说,困难的部分是在方法中,做什么?在方法中,、做什么?

  • 让我们回到函数,进行更深入的研究。 我们的第一个主题是 递归(recursion)。 如果你不是刚接触编程,那么你可能已经很熟悉它了,那么你可以跳过这一章。 递归是一种编程模式,在一个任务可以自然地拆分成多个相同类型但更简单的任务的情况下非常有用。或者,在一个任务可以简化为一个简单的行为加上该任务的一个更简单的变体的时候可以使用。或者,就像我们很快会看到的那样,处理某些数据结构。 当一个函数解决一

  • 我明白了在递归中,每个递归调用是如何堆栈在堆栈上的;如果超过堆栈限制,则会出现堆栈溢出。那么为什么Python的返回一个数字;递归调用的最大深度? 这不是取决于我在递归函数中做了什么吗?还是以某种方式将变量保存在堆栈以外的其他地方?它是如何工作的?

  • 我试图递归地在二叉树中找到最小值(不是二叉查找树)。让我困惑的是基本情况。如果TreeNode t为空,返回什么?因为我将使用返回的值将其与当前的最小值进行比较(我认为),我相信我返回的内容很重要。

  • 很长一段时间以来,我一直在解决这项任务。我需要编写一个递归函数来检查每个节点是否小于其任何子节点。如果二叉树是最小堆,则返回 true,否则返回 false。 到目前为止我所拥有的: