python實現【用兩個棧實現隊列】力扣題

題目用兩個棧實現隊列
具體描述
用兩個棧實現一個隊列。隊列的聲明如下,請實現它的兩個函數 appendTail 和 deleteHead ,分別完成在隊列尾部插入整數和在隊列頭部刪除整數的功能。(若隊列中沒有元素,deleteHead 操作返回 -1 )

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
題解前若無思路可看這裏漫畫更清晰
題解

class CQueue:

    def __init__(self):
        self.stack1=[] #基本棧
        self.stack2=[] #輔助棧


    def appendTail(self, value: int) -> None:
        self.stack1.append(value) #元素放入基本棧


    def deleteHead(self) -> int:
        # 將基本棧的元素放入輔助棧,基本棧後進元素先放入輔助棧
        if len(self.stack2) == 0:
            while len(self.stack1) != 0:
                self.stack2.append(self.stack1.pop())
        # 從輔助棧放出元素
        if len(self.stack2) != 0:
            return(self.stack2.pop())
        return(-1)

# Your CQueue object will be instantiated and called as such:
# obj = CQueue()
# obj.appendTail(value)
# param_2 = obj.deleteHead()

複雜度分析

(1)插入元素
時間複雜度:O(1)。向基本棧插入一個元素,在隊列尾部插入元素,使用常數時間。
空間複雜度:O(1)。向基本棧插入一個元素,使用常數空間。
(2)刪除元素
時間複雜度:O(n)。基本棧的元素要刪除並插入到輔助棧,是線性時間複雜度。
空間複雜度:O(n)。需要額外空間儲存元素。
力扣官方給的題解插入刪除元素複雜度正好和上述相反,其將棧元素刪除壓入至輔助棧放入appendTail插入元素步,個人理解中,對於刪除操作少的,插入元素操作多的,將appendTail更簡單更好一些

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章