(99+) Explanation for Java O(n) time & O(1) space solution - LeetCode Discuss



(99+) Explanation for Java O(n) time & O(1) space solution - LeetCode Discuss

To have O(1) space solution, we have to drop the stack. To see why we can drop it, we need to reexamine the main purpose of the stack: it is used to hold temporary results for partial expressions with lower precedence levels.

For problem 224. Basic Calculator, the depth of precedence levels is unknown, since we can have arbitrary levels of parentheses in the expression. Therefore we do need the stack in the solution.

However for the current problem, we only have two precedence levels, lower level with '+' & '-' operations and higher level with '*' & '/' operations. So the stack can be replaced by two variables, one for the lower level and the other for the higher level. Note that when we are done with a partial expression involving '/' & '*' operations only, the result will fall back to the lower level.

Now let's look at each level separately.

First of course we will have a variable "num" to represent the current number involved in the operations.

For the lower level, we use a variable "pre" to denote the partial result. And as usual we will have a variable "sign" to indicate the sign of the incoming result.

For the higher level, we use a variable "curr" to represent the partial result, and another variable "op" to indicate what operation should be performed:

  1. If op = 0, no '*' or '/' operation is needed and we simply assign num to curr;
  2. if op = 1, we perform multiplication: curr = curr * num;
  3. if op = -1, we perform division: curr = curr / num.

The key now is to figure out what to do depending on the scanned character from string s. There are three cases:

  1. A digit is hit: As usual we will update the variable "num". One more step here is that we need to determine if this is the last digit of the current number. If so, we need to perform the corresponding operation depending on the value of "op" and update the value of "curr" (It is assumed that we are at the higher precedence level by default);
  2. A ' * ' or '/' is hit: We need to update the value of "op" and reset "num" to 0;
  3. A '+' or '-' is hit: Current higher precedence level is over, so the partial result (which is denoted by "curr") will fall back to the lower level and can be incorporated into the lower level partial result "pre". And of course we need to update the "sign" as well as reset "op" and "num" to 0.


Read full article from (99+) Explanation for Java O(n) time & O(1) space solution - LeetCode Discuss


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