-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy path225.ImplementStackUsingQueues.cpp
120 lines (112 loc) · 2.97 KB
/
225.ImplementStackUsingQueues.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
* @lc app=leetcode id=225 lang=cpp
*
* [225] Implement Stack using Queues
*
* https://leetcode.com/problems/implement-stack-using-queues/description/
*
* algorithms
* Easy (47.30%)
* Likes: 1032
* Dislikes: 680
* Total Accepted: 218K
* Total Submissions: 454.3K
* Testcase Example:
* '["MyStack","push","push","top","pop","empty"]\n[[],[1],[2],[],[],[]]'
*
* Implement a last in first out (LIFO) stack using only two queues. The
* implemented stack should support all the functions of a normal queue (push,
* top, pop, and empty).
*
* Implement the MyStack class:
*
*
* void push(int x) Pushes element x to the top of the stack.
* int pop() Removes the element on the top of the stack and returns it.
* int top() Returns the element on the top of the stack.
* boolean empty() Returns true if the stack is empty, false otherwise.
*
*
* Notes:
*
*
* You must use only standard operations of a queue, which means only push to
* back, peek/pop from front, size, and is empty operations are valid.
* Depending on your language, the queue may not be supported natively. You may
* simulate a queue using a list or deque (double-ended queue), as long as you
* use only a queue's standard operations.
*
*
*
* Example 1:
*
*
* Input
* ["MyStack", "push", "push", "top", "pop", "empty"]
* [[], [1], [2], [], [], []]
* Output
* [null, null, null, 2, 2, false]
*
* Explanation
* MyStack myStack = new MyStack();
* myStack.push(1);
* myStack.push(2);
* myStack.top(); // return 2
* myStack.pop(); // return 2
* myStack.empty(); // return False
*
*
*
* Constraints:
*
*
* 1 <= x <= 9
* At most 100 calls will be made to push, pop, top, and empty.
* All the calls to pop and top are valid.
*
*
*
* Follow-up: Can you implement the stack such that each operation is amortized
* O(1) time complexity? In other words, performing n operations will take
* overall O(n) time even if one of those operations may take longer. You can
* use more than two queues.
*
*/
// @lc code=start
#include <queue>
class MyStack {
public:
/** Initialize your data structure here. */
MyStack() {}
/** Push element x onto stack. */
void push(int x) {
std::queue<int> temp;
temp.push(x);
while (!ordered_.empty()) {
temp.push(ordered_.front());
ordered_.pop();
}
ordered_.swap(temp);
}
/** Removes the element on top of the stack and returns that element. */
int pop() {
int val = ordered_.front();
ordered_.pop();
return val;
}
/** Get the top element. */
int top() { return ordered_.front(); }
/** Returns whether the stack is empty. */
bool empty() { return ordered_.empty(); }
private:
std::queue<int> ordered_;
};
/**
* Your MyStack object will be instantiated and called as such:
* MyStack* obj = new MyStack();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->top();
* bool param_4 = obj->empty();
*/
// @lc code=end