首頁 >Java >java教程 >從Java的堆棧中刪除所有元素

從Java的堆棧中刪除所有元素

Patricia Arquette
Patricia Arquette原創
2025-02-07 11:32:09306瀏覽

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. >

時間和空間複雜性(輔助堆棧):>

<code class="language-java">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]
    }
}</integer></integer></integer></code>

時間複雜性: o(n) - 我們兩次通過堆棧迭代。 空間複雜度: o(n) - 我們使用的輔助堆棧可能與輸入堆棧相同。

  • 方法2:遞歸
  • 這個遞歸解決方案優雅地處理了偶數刪除:
  • >基本情況:如果堆棧為空,請返回。
  • >
彈出頂部元素。

遞歸調用函數以處理其餘的堆棧。 > 遞歸調用後,

>檢查彈出元素是否奇數。如果是這樣,請將其推回堆上。

  1. >代碼示例(遞歸):
  2. 時間和空間複雜性(遞歸):removeEven>
  3. 時間複雜性: o(n) - 我們遞歸遍歷堆棧。

空間複雜性: o(n) - 在最壞情況下,遞歸調用堆棧可以生長到輸入堆棧的大小。 >

<code class="language-java">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]
    }
}</integer></integer></code>
結論:

兩種方法都有效地從堆棧中刪除了偶數數字。輔助堆棧方法更加簡單,而遞歸方法則提供了更簡潔,可能更有效的解決方案(取決於JVM的優化)。 選擇取決於個人喜好和編碼樣式。 請記住,這些技術可以根據各種標準適應過濾堆棧。

>

以上是從Java的堆棧中刪除所有元素的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn