This post marks the start point of the much awaited recursion series on Let'sCode_ =)
We start it with a GeeksForGeeks problem : https://www.geeksforgeeks.org/delete-middle-element-stack/
Position of Middle element of all elements from top of stack (1 based):
stack.size()/2 + 1
Now, to build an effective solution we can use:
Methodology: Recursion
Time Complexity: O(n) where n is the number of elements in the stack
Space Complexity: O(n) considering the accumulation of constant space in each level of the recursive stack. O(1) if we dis-consider the stack space accumulation.
Here is one such solution:
<-- --todeletepos="" base="" case="" deletemidrecur="" int="" nteger="" printstack="" private="" return="" stack.pop="" stack.push="" stack="" static="" tack="" top="" void="">/*package whatever //do not write package name here */ import java.io.*; import java.util.*; class GFG { public static void main (String[] args) { System.out.println("GfG!"); Stack<Integer> stack = new Stack<>(); stack.push(6); stack.push(5); stack.push(4); stack.push(3); stack.push(2); stack.push(1); deleteMid(stack); } private static void deleteMid(Stack<Integer> stack) { if (stack == null) return; if (stack.isEmpty()) return; int mid = stack.size()/2+1; deleteMidRecur(stack, mid); printStack(stack); } private static void deleteMidRecur (Stack<Integer> stack, int toDeletePos) { if (toDeletePos == 1) { // delete this element <-- base case stack.pop(); return; } int top = stack.pop(); deleteMidRecur(stack, --toDeletePos); stack.push(top); } private static void printStack (Stack<Integer> stack) { while (!stack.isEmpty()) { System.out.println(stack.pop()); } } } -->
IMO, such are the most efficient solutions to this problem. So share your thoughts and let me know your point of views.
Happy Coding!
Love! ❤️
#Lets #Code
Follow us on :
https://twitter.com/ThinkAlgorithms
No comments:
Post a Comment