lintcode练习-490. 栈集

描述

假如你有一堆的盘子。如果你堆得太高的话,就可能会垮掉。所以,在真实的生活中,如果盘子叠到一定高度,你会重新开始堆新的一堆盘子。

实现这样的一个数据结构,我们称之为栈集,来模拟这个过程。这个栈集包含若干个栈(可以理解为若干堆的盘子),如果一个栈满了,就需要新建一个栈来装新加入的项。你需要实现栈集的两个方法,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

猜你喜欢

转载自blog.csdn.net/qq_36387683/article/details/81265296