本教程演示了兩種消除Java堆棧中均勻數的方法。 堅持最後一式(LIFO)原理的堆棧為這種類型的過濾帶來了獨特的挑戰。 此處顯示的技術適用於其他過濾方案,而不僅僅是刪除均勻的數字。
問題:
給出了一堆整數,編寫一個Java程序以刪除所有偶數數字。示例輸入和輸出:
>
>[1, 2, 3, 4, 5]
輸出1:[1, 3, 5]
[1, 7, 3, 11, 9]
[1, 7, 3, 11, 9]
輸出2:>解決方案方法:
我們將探索兩種不同的方法:
>使用輔助堆棧:此方法使用臨時堆棧來存儲奇數數字,同時迭代原始堆棧。
使用遞歸:這種遞歸方法有效地處理堆棧,在遞歸調用過程中刪除了均勻的數字。
這種方法涉及以下步驟:
創建一個臨時
Stack
迭代原始堆棧,彈出每個元素。 tempStack
>
%
tempStack
tempStack
時間和空間複雜性(輔助堆棧):
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] } }
時間複雜性:
遞歸調用函數以處理其餘的堆棧。
removeEven
>
空間複雜性:
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中文網其他相關文章!