-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path232.implement-queue-using-stacks.cpp
More file actions
125 lines (114 loc) · 2.89 KB
/
232.implement-queue-using-stacks.cpp
File metadata and controls
125 lines (114 loc) · 2.89 KB
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
121
122
123
124
/*
* @lc app=leetcode id=232 lang=cpp
*
* [232] Implement Queue using Stacks
*
* https://leetcode.com/problems/implement-queue-using-stacks/description/
*
* algorithms
* Easy (59.01%)
* Likes: 3685
* Dislikes: 242
* Total Accepted: 440.7K
* Total Submissions: 743.7K
* Testcase Example: '["MyQueue","push","push","peek","pop","empty"]\n[[],[1],[2],[],[],[]]'
*
* Implement a first in first out (FIFO) queue using only two stacks. The
* implemented queue should support all the functions of a normal queue (push,
* peek, pop, and empty).
*
* Implement the MyQueue class:
*
*
* void push(int x) Pushes element x to the back of the queue.
* int pop() Removes the element from the front of the queue and returns
* it.
* int peek() Returns the element at the front of the queue.
* boolean empty() Returns true if the queue is empty, false otherwise.
*
*
* Notes:
*
*
* You must use only standard operations of a stack, which means only push to
* top, peek/pop from top, size, and is empty operations are valid.
* Depending on your language, the stack may not be supported natively. You may
* simulate a stack using a list or deque (double-ended queue) as long as you
* use only a stack's standard operations.
*
*
*
* Example 1:
*
*
* Input
* ["MyQueue", "push", "push", "peek", "pop", "empty"]
* [[], [1], [2], [], [], []]
* Output
* [null, null, null, 1, 1, false]
*
* Explanation
* MyQueue myQueue = new MyQueue();
* myQueue.push(1); // queue is: [1]
* myQueue.push(2); // queue is: [1, 2] (leftmost is front of the queue)
* myQueue.peek(); // return 1
* myQueue.pop(); // return 1, queue is [2]
* myQueue.empty(); // return false
*
*
*
* Constraints:
*
*
* 1 <= x <= 9
* At most 100 calls will be made to push, pop, peek, and empty.
* All the calls to pop and peek are valid.
*
*
*
* Follow-up: Can you implement the queue 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.
*
*/
// @lc code=start
class MyQueue {
public:
#include <stack>
stack<int> in;
stack <int> out;
//Out will be a queue
MyQueue() {
}
void push(int x) {
while(!out.empty()){
in.push(out.top());
out.pop();
}
in.push(x);
while(!in.empty()){
out.push(in.top());
in.pop();
}
}
int pop() {
int temp = out.top();
out.pop();
return temp;
}
int peek(void){
return out.top();
}
bool empty() {
return out.empty();
}
};
/**
* Your MyQueue object will be instantiated and called as such:
* MyQueue* obj = new MyQueue();
* obj->push(x);
* int param_2 = obj->pop();
* int param_3 = obj->peek();
* bool param_4 = obj->empty();
*/
// @lc code=end