225. Implement Stack using Queues
Implement the following operations of a stack using queues.
push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
empty() – Return whether the stack is empty.
Example:
MyStack stack = new MyStack();
stack.push(1);
stack.push(2);
stack.top(); // returns 2
stack.pop(); // returns 2
stack.empty(); // returns false
python解答:
class MyStack(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.stack1 = []
def push(self, x):
"""
Push element x onto stack.
:type x: int
:rtype: void
"""
self.stack1.append(x)
def pop(self):
"""
Removes the element on top of the stack and returns that element.
:rtype: int
"""
return self.stack1.pop()
def top(self):
"""
Get the top element.
:rtype: int
"""
return self.stack1[-1]
def empty(self):
"""
Returns whether the stack is empty.
:rtype: bool
"""
return len(self.stack1) == 0
# Your MyStack object will be instantiated and called as such:
# obj = MyStack()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.top()
# param_4 = obj.empty()
232. Implement Queue using Stacks
Implement the following operations of a queue using stacks.
push(x) – Push element x to the back of queue.
pop() – Removes the element from in front of queue.
peek() – Get the front element.
empty() – Return whether the queue is empty.
Example:
MyQueue queue = new MyQueue();
queue.push(1);
queue.push(2);
queue.peek(); // returns 1
queue.pop(); // returns 1
queue.empty(); // returns false
class MyQueue(object):
def __init__(self):
"""
Initialize your data structure here.
"""
self.q = []
def push(self, x):
"""
Push element x to the back of queue.
:type x: int
:rtype: void
"""
self.q.append(x)
def pop(self):
"""
Removes the element from in front of queue and returns that element.
:rtype: int
"""
return self.q.pop(0)
def peek(self):
"""
Get the front element.
:rtype: int
"""
return self.q[0]
def empty(self):
"""
Returns whether the queue is empty.
:rtype: bool
"""
return self.q == []
# Your MyQueue object will be instantiated and called as such:
# obj = MyQueue()
# obj.push(x)
# param_2 = obj.pop()
# param_3 = obj.peek()
# param_4 = obj.empty()
155. Min Stack
Design a stack that supports push, pop, top, and retrieving the minimum element in constant time.
push(x) – Push element x onto stack.
pop() – Removes the element on top of the stack.
top() – Get the top element.
getMin() – Retrieve the minimum element in the stack.
Example:
MinStack minStack = new MinStack();
minStack.push(-2);
minStack.push(0);
minStack.push(-3);
minStack.getMin(); --> Returns -3.
minStack.pop();
minStack.top(); --> Returns 0.
minStack.getMin(); --> Returns -2.
python 解答
- 思路一:
直接采用list的方法才操作,取最小值直接用min()
class MinStack(object):
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
def push(self, x):
"""
:type x: int
:rtype: void
"""
self.stack.append(x)
def pop(self):
"""
:rtype: void
"""
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1]
def getMin(self):
"""
:rtype: int
"""
return min(self.stack)
# Your MinStack object will be instantiated and called as such:
# obj = MinStack()
# obj.push(x)
# obj.pop()
# param_3 = obj.top()
# param_4 = obj.getMin()
- 思路二:
另外添加一个list,在pop和push的过程中不断更新list中的最小值
这种方法比思路一快了10倍,内存却增加很少。
def __init__(self):
"""
initialize your data structure here.
"""
self.stack = []
self.min1 = []
def push(self, x):
"""
:type x: int
:rtype: void
"""
if len(self.stack) == 0:
self.min1.append(x)
else:
if self.min1[-1] > x:
self.min1.append(x)
else:
self.min1.append(self.min1[-1])
self.stack.append(x)
def pop(self):
"""
:rtype: void
"""
self.min1.pop()
self.stack.pop()
def top(self):
"""
:rtype: int
"""
return self.stack[-1]
def getMin(self):
"""
:rtype: int
"""
return self.min1[-1]
224. Basic Calculator
Implement a basic calculator to evaluate a simple expression string.
The expression string may contain open ( and closing parentheses ), the plus + or minus sign -, non-negative integers and empty spaces .
Example 1:
Input: “1 + 1”
Output: 2
Example 2:
Input: " 2-1 + 2 "
Output: 3
Example 3:
Input: “(1+(4+5+2)-3)+(6+8)”
Output: 23
- 思路:
遇到"(",就把之前的操作符和result进栈,然后对"()“中的表达式进行计算;遇到”)",就把操作符和原result出栈。
class Solution(object):
def calculate(self, s):
"""
:type s: str
:rtype: int
"""
stack = []
operator = 1
res = 0
num = 0
for i in range(len(s)):
if s[i] == '(':
stack.append(res)
stack.append(operator)
res = 0
operator = 1
num = 0
elif s[i] == ')':
res = res + num*operator
operator = stack.pop()
res = stack.pop() + res*operator
num = 0
operator = 1
elif s[i] == '+':
res = res + num * operator
num = 0
operator = 1
elif s[i] == '-':
res = res + num * operator
num = 0
operator = -1
elif s[i] != ' ':
num = num*10 + int(s[i])
res = res + num * operator
return res