首页 > Java > java教程 > 从Java的堆栈中删除所有元素

从Java的堆栈中删除所有元素

Patricia Arquette
发布: 2025-02-07 11:32:09
原创
305 人浏览过

Delete all even elements from a stack in Java

本教程演示了两种消除Java堆栈中均匀数的方法。 坚持最后一式(LIFO)原理的堆栈为这种类型的过滤带来了独特的挑战。 此处显示的技术适用于其他过滤方案,而不仅仅是删除均匀的数字。

问题:

给出了一堆整数,编写一个Java程序以删除所有偶数数字。>

示例输入和输出:

>

>
    >输入1:
  • [1, 2, 3, 4, 5]输出1:[1, 3, 5]
  • >>输入2:[1, 7, 3, 11, 9][1, 7, 3, 11, 9]输出2:
  • (无需删除的数字)

>解决方案方法:

我们将探索两种不同的方法:

  1. >使用辅助堆栈:此方法使用临时堆栈来存储奇数数字,同时迭代原始堆栈。

  2. 使用递归:这种递归方法有效地处理堆栈,在递归调用过程中删除了均匀的数字。>

方法1:辅助堆栈

这种方法涉及以下步骤:

创建一个临时
    (例如,
  1. )。 Stack迭代原始堆栈,弹出每个元素。tempStack>
  2. 如果元素是奇数的(使用Modulo Operator
  3. 检查)
  4. 原始堆栈是空的,请将元素从
  5. 转移到原始堆栈。% tempStack
  6. >代码示例(辅助堆栈):tempStack
  7. >

时间和空间复杂性(辅助堆栈):>

import java.util.Stack;

public class RemoveEvenElements {
    public static void removeEven(Stack<Integer> stack) {
        Stack<Integer> tempStack = new Stack<>();
        while (!stack.isEmpty()) {
            int element = stack.pop();
            if (element % 2 != 0) {
                tempStack.push(element);
            }
        }
        while (!tempStack.isEmpty()) {
            stack.push(tempStack.pop());
        }
    }

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        removeEven(stack);
        System.out.println(stack); // Output: [1, 3, 5]
    }
}
登录后复制

时间复杂性: o(n) - 我们两次通过堆栈迭代。 空间复杂度: o(n) - 我们使用的辅助堆栈可能与输入堆栈相同。

  • 方法2:递归
  • 这个递归解决方案优雅地处理了偶数删除:
  • >基本情况:如果堆栈为空,请返回。
  • >
弹出顶部元素。

递归调用函数以处理其余的堆栈。> 递归调用后,

>检查弹出元素是否奇数。如果是这样,请将其推回堆上。

  1. >代码示例(递归):
  2. 时间和空间复杂性(递归):removeEven>
  3. 时间复杂性: o(n) - 我们递归遍历堆栈。

空间复杂性: o(n) - 在最坏情况下,递归调用堆栈可以生长到输入堆栈的大小。>

import java.util.Stack;

public class RemoveEvenElements {
    public static void removeEven(Stack<Integer> stack) {
        if (stack.isEmpty()) {
            return;
        }
        int element = stack.pop();
        removeEven(stack);
        if (element % 2 != 0) {
            stack.push(element);
        }
    }

    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);
        stack.push(5);
        removeEven(stack);
        System.out.println(stack); // Output: [1, 3, 5]
    }
}
登录后复制
结论:

两种方法都有效地从堆栈中删除了偶数数字。辅助堆栈方法更加简单,而递归方法则提供了更简洁,可能更有效的解决方案(取决于JVM的优化)。 选择取决于个人喜好和编码样式。 请记住,这些技术可以根据各种标准适应过滤堆栈。

>

以上是从Java的堆栈中删除所有元素的详细内容。更多信息请关注PHP中文网其他相关文章!

相关标签:
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
最新问题
java可以做为web的后端吗?
来自于 1970-01-01 08:00:00
0
0
0
安装JAVA
来自于 1970-01-01 08:00:00
0
0
0
无法安装java
来自于 1970-01-01 08:00:00
0
0
0
java - php调取webservice的map类型,如果封装?
来自于 1970-01-01 08:00:00
0
0
0
这个是Java语言的吗
来自于 1970-01-01 08:00:00
0
0
0
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板