Skip to content

Commit 8c6c81e

Browse files
author
Mauricio Klein
committed
Add solution for challenge #40
1 parent 48b90ea commit 8c6c81e

File tree

6 files changed

+82
-0
lines changed

6 files changed

+82
-0
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,4 @@
3939
- [x] [Challenge 37: Active time](challenge-37/)
4040
- [x] [Challenge 38: Remove k-th Last Element From Linked List](challenge-38/)
4141
- [x] [Challenge 39: Remove Consecutive Nodes that Sum to 0](challenge-39/)
42+
- [x] [Challenge 40: Queue Using Two Stacks](challenge-40/)

challenge-40/Makefile

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
test:
2+
python test_*.py
3+
4+
.PHONY: test

challenge-40/README.md

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Queue Using Two Stacks
2+
3+
This problem was asked by Apple.
4+
5+
## Description
6+
7+
Implement a queue class using two stacks. A queue is a data structure that supports the FIFO protocol (First in = first out). Your class should support the enqueue and dequeue methods like a standard queue.
8+
9+
## Example
10+
```python
11+
class Queue:
12+
def __init__(self):
13+
# Fill this in.
14+
15+
def enqueue(self, val):
16+
# Fill this in.
17+
18+
def dequeue(self):
19+
# Fill this in.
20+
21+
q = Queue()
22+
23+
q.enqueue(1)
24+
q.enqueue(2)
25+
q.enqueue(3)
26+
27+
print q.dequeue() # 1
28+
print q.dequeue() # 2
29+
print q.dequeue() # 3
30+
```

challenge-40/__init__.py

Whitespace-only changes.

challenge-40/solver.py

+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Queue:
2+
def __init__(self):
3+
self.main_stack = []
4+
self.aux_stack = []
5+
6+
#
7+
# Time complexity: O(n)
8+
#
9+
def enqueue(self, val):
10+
# Move all elements from the main stack
11+
# to the aux stack
12+
while self.main_stack:
13+
self.aux_stack.append(
14+
self.main_stack.pop()
15+
)
16+
17+
# Add the element to the inverted stack
18+
self.aux_stack.append(val)
19+
20+
# Move elements back to the main stack
21+
while self.aux_stack:
22+
self.main_stack.append(
23+
self.aux_stack.pop()
24+
)
25+
26+
#
27+
# Time complexity: O(1)
28+
#
29+
def dequeue(self):
30+
return self.main_stack.pop()

challenge-40/test_solver.py

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import unittest
2+
from solver import Queue
3+
4+
class TestSolver(unittest.TestCase):
5+
def test_queue(self):
6+
q = Queue()
7+
8+
q.enqueue(1)
9+
q.enqueue(2)
10+
q.enqueue(3)
11+
12+
self.assertEqual(q.dequeue(), 1)
13+
self.assertEqual(q.dequeue(), 2)
14+
self.assertEqual(q.dequeue(), 3)
15+
16+
if __name__ == "__main__":
17+
unittest.main()

0 commit comments

Comments
 (0)