Nerd Paradise : Coding Interview 6: Constant Time Stack with GetMin



Nerd Paradise : Coding Interview 6: Constant Time Stack with GetMin

"Create a datastructure that is a stack with Push, Pop commands that work in constant time. Additionally, there should be another command called GetMin which returns the smallest element in the stack."

If you have a collection of things, and you want to find the smallest element in it, you have to iterate through the collection to find it. Generally. This may give you the impression that Push and Pop are O(1) operations and GetMin is O(n). However there are better ways than brute force.

Because this collection is limited to two specific operations that you can implement any way you want, the first reaction is to keep track of a minimum and update it when you push a number larger than the minimum. This is a O(1) operation. However, popping a number that's a minimum will require you to go through the collection and re-calculate the new minimum. The simple implementation is O(n) but only in cases when the minimum is popped. All other cases are O(1) as well. This is a good solution for most cases, and can be optimized to O(log n) if you try hard enough.

But the question deals with a stack. The stack has a unique quality that any state of the stack can be tracked alongside the element in the stack. Imagine an implementation where you store tuple'd pairs in the stack instead of just integers. The first number in the tuple is the number you're pushing into the stack. The 2nd number is the minimum of the stack when that number was pushed. Once you pop a tuple, you're left with an accurate min at the new top of the stack.

Read full article from Nerd Paradise : Coding Interview 6: Constant Time Stack with GetMin


No comments:

Post a Comment

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts