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

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

Patricia Arquette
發布: 2025-02-07 11:32:09
原創
283 人瀏覽過

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解密
來自於 1970-01-01 08:00:00
0
0
0
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板