描述
假如你有一堆的盘子。如果你堆得太高的话,就可能会垮掉。所以,在真实的生活中,如果盘子叠到一定高度,你会重新开始堆新的一堆盘子。
实现这样的一个数据结构,我们称之为栈集
,来模拟这个过程。这个栈集包含若干个栈(可以理解为若干堆的盘子),如果一个栈满了,就需要新建一个栈来装新加入的项。你需要实现栈集的两个方法,push(item)
和 pop()
,让这个栈集对外表现得就像是一个栈在进行操作一样。
您在真实的面试中是否遇到过这个题? 是
样例
SetOfStacks(2); // 创建一个单个栈容量为2的栈集
push(1)
push(2)
push(4)
push(8)
push(16)
pop() // return 16
pop() // return 8
pop() // return 4
挑战
后续问题: 为栈集实现一个popAt(int index)
的方法,让他可以直接从给定的某个栈上进行pop。
链接: 栈集II
实现代码:
push:当setofstack为空或者里面的最后一个子栈为满时,新加一个子栈
pop: 从最后一个子栈开始弹出,如果弹出后的子栈为空,则弹出空子栈
class SetOfStacks:
"""
@param: capacity: An inetger, capacity of sub stack
"""
def __init__(self, capacity):
# do intialization if necessary
self.setofstack = []
self.capacity = capacity
"""
@param: v: An integer
@return: nothing
"""
def push(self, v):
# write your code here
if not self.setofstack or len(self.setofstack[-1]) == self.capacity:
self.setofstack.append([v])
else:
self.setofstack[-1].append(v)
"""
@return: An integer
"""
def pop(self):
# write your code here
result = self.setofstack[-1].pop()
if len(self.setofstack[-1]) == 0:
self.setofstack.pop()
return result