Skip to content

Latest commit

 

History

History
85 lines (74 loc) · 1.97 KB

1670.md

File metadata and controls

85 lines (74 loc) · 1.97 KB

1670. Design Front Middle Back Queue

Solution 1

class FrontMiddleBackQueue(object):

    def __init__(self):
        self.left = collections.deque()
        self.right = collections.deque()

    def balance(self):
        if len(self.left) > len(self.right):
            self.right.appendleft(self.left.pop())
        elif len(self.right) > len(self.left) + 1:
            self.left.append(self.right.popleft())
    
    def pushFront(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.left.appendleft(val)
        self.balance()

    def pushMiddle(self, val):
        """
        :type val: int
        :rtype: None
        """
        if len(self.left) < len(self.right):
            self.left.append(val)
        else:
            self.right.appendleft(val)

    def pushBack(self, val):
        """
        :type val: int
        :rtype: None
        """
        self.right.append(val)
        self.balance()

    def popFront(self):
        """
        :rtype: int
        """
        if not self.right:
            return -1
        if self.left:
            ans = self.left.popleft()
        else:
            ans = self.right.popleft()
        self.balance()
        return ans

    def popMiddle(self):
        """
        :rtype: int
        """
        if not self.right:
            return -1
        if len(self.left) == len(self.right):
            return self.left.pop()
        return self.right.popleft()

    def popBack(self):
        """
        :rtype: int
        """
        if not self.right:
            return -1
        ans = self.right.pop()
        self.balance()
        return ans

# Your FrontMiddleBackQueue object will be instantiated and called as such:
# obj = FrontMiddleBackQueue()
# obj.pushFront(val)
# obj.pushMiddle(val)
# obj.pushBack(val)
# param_4 = obj.popFront()
# param_5 = obj.popMiddle()
# param_6 = obj.popBack()