国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

(※)力扣刷題-棧和隊列-用棧實現(xiàn)隊列

這篇具有很好參考價值的文章主要介紹了(※)力扣刷題-棧和隊列-用棧實現(xiàn)隊列。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

使用棧實現(xiàn)隊列的下列操作:

  • push(x) – 將一個元素放入隊列的尾部。
  • pop() – 從隊列首部移除元素。
  • peek() – 返回隊列首部的元素。
  • empty() – 返回隊列是否為空。

說明:
你只能使用標準的棧操作 – 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。
你所使用的語言也許不支持棧。你可以使用 list 或者 deque(雙端隊列)來模擬一個棧,只要是標準的棧操作即可。
假設所有操作都是有效的 (例如,一個空的隊列不會調(diào)用 pop 或者 peek 操作)?!?gt;判斷代碼健壯性

思路

這道題考察的就是對棧和隊列的掌握程度。
使用棧來模式隊列的行為,如果僅僅用一個棧,是一定不行的,所以需要兩個棧一個輸入棧,一個輸出棧,這里要注意輸入棧和輸出棧的關系。
(※)力扣刷題-棧和隊列-用棧實現(xiàn)隊列,leetcode刷題,leetcode,python,算法,數(shù)據(jù)結構
在push數(shù)據(jù)的時候,只要數(shù)據(jù)放進輸入棧就好,但在pop的時候,操作就復雜一些,輸出棧如果為空,就把進棧數(shù)據(jù)全部導入進來(注意是全部導入),再從出棧彈出數(shù)據(jù),如果輸出棧不為空,則直接從出棧彈出數(shù)據(jù)就可以了。
最后如何判斷隊列為空呢?如果進棧和出棧都為空的話,說明模擬的隊列為空了。

代碼

注意一些細節(jié):

  • 判斷棧是否為空,才能夠進行有效操作
  • pop時候的復雜性
  • peek復用pop后需要把元素加回去
class MyQueue(object):

    def __init__(self):
        """
        in 主要負責push out主要負責pop(用棧實現(xiàn)隊列 必然是要用到兩個棧)
        """
        self.stack_in = [] # python中沒有棧這個數(shù)據(jù)結構 用列表代替
        self.stack_out = []


    def push(self, x):
        """
        :type x: int
        :rtype: None
        """
        # 新元素進來就往 in 中加入 
        # 在push數(shù)據(jù)的時候,只要數(shù)據(jù)放進輸入棧就好
        self.stack_in.append(x)


    def pop(self):
        """
        :rtype: int
        """
        # 在pop的時候,操作就復雜一些,輸出棧如果為空,就把進棧數(shù)據(jù)全部導入進來(注意是全部導入),
        # 再從出棧彈出數(shù)據(jù),如果輸出棧不為空,則直接從出棧彈出數(shù)據(jù)就可以了。
        # 從隊列首部移除元素
        if self.empty():
            return None
        if self.stack_out: # stack_out中有元素
            return self.stack_out.pop() # 這里用return 既可以
        else:
            for i in range(len(self.stack_in)):
                self.stack_out.append(self.stack_in.pop()) 
            return self.stack_out.pop()
            

    def peek(self):
        """
        :rtype: int
        """
        ans = self.pop() # 代碼 函數(shù)復用
        self.stack_out.append(ans) # 因為只是返回元素 所以采用pop刪除之后(代碼復用)還需要再加回去
        return ans


    def empty(self):
        """
        :rtype: bool
        """
        return not (self.stack_in or self.stack_out)



# 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()

參考:https://www.programmercarl.com/0232.%E7%94%A8%E6%A0%88%E5%AE%9E%E7%8E%B0%E9%98%9F%E5%88%97.html文章來源地址http://www.zghlxwxcb.cn/news/detail-723043.html

到了這里,關于(※)力扣刷題-棧和隊列-用棧實現(xiàn)隊列的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 力扣刷題-隊列-滑動窗口最大值

    力扣刷題-隊列-滑動窗口最大值

    給定一個數(shù)組 nums,有一個大小為 k 的滑動窗口從數(shù)組的最左側移動到數(shù)組的最右側。你只可以看到在滑動窗口內(nèi)的 k 個數(shù)字?;瑒哟翱诿看沃幌蛴乙苿右晃?。 返回滑動窗口中的最大值。 進階: 在線性時間復雜度內(nèi)解決此題? 參考:https://www.programmercarl.com/0239.%E6%BB%91%E5%8A

    2024年02月06日
    瀏覽(23)
  • 用隊列實現(xiàn)棧和用棧實現(xiàn)隊列

    用隊列實現(xiàn)棧和用棧實現(xiàn)隊列

    前面我們實現(xiàn)了棧和隊列,其實棧和隊列之間是可以相互實現(xiàn)的 下面我們來看一下 用 隊列實現(xiàn)棧 和 用棧實現(xiàn)隊列 使用兩個隊列實現(xiàn)一個后入先出(LIFO)的棧,并支持普通棧的全部四種操作(push、top、pop 和 empty) 實現(xiàn) MyStack 類: void push(int x) 將元素 x 壓入棧頂。 int pop

    2023年04月09日
    瀏覽(22)
  • 【leetcode 力扣刷題】匯總區(qū)間//合并區(qū)間//插入?yún)^(qū)間

    【leetcode 力扣刷題】匯總區(qū)間//合并區(qū)間//插入?yún)^(qū)間

    題目鏈接:228.匯總區(qū)間 題目內(nèi)容: 看題目真是沒懂這個題到底是要干啥……實際上題目要求的 恰好覆蓋數(shù)組中所有數(shù)字 的 最小有序 區(qū)間范圍列表,這個最小是指一個區(qū)間范圍小。比如能夠覆蓋{2,3,4,6}的區(qū)間可以是[2,6],但是5在區(qū)間內(nèi),卻不在數(shù)組內(nèi),因此這個區(qū)間不是最

    2024年02月10日
    瀏覽(33)
  • leetcode 力扣刷題 旋轉矩陣(循環(huán)過程邊界控制)

    leetcode 力扣刷題 旋轉矩陣(循環(huán)過程邊界控制)

    下面的題目的主要考察點都是,二維數(shù)組從左上角開始順時針(或者逆時針)按圈遍歷數(shù)組的過程。順時針按圈遍歷的過程如下: 對于每一圈,分為四條邊 ,循環(huán)遍歷就好。這時,對于 四個角 的元素的處理,可以將四條邊的遍歷分為以下兩種情況: 第一種:每條邊都從對

    2024年02月12日
    瀏覽(21)
  • 【leetcode 力扣刷題】移除鏈表元素 多種解法

    【leetcode 力扣刷題】移除鏈表元素 多種解法

    題目鏈接:203.移除鏈表元素 題目內(nèi)容: 理解題意:就是單純的刪除鏈表中所有值等于給定的val的節(jié)點。上一篇博客中介紹了鏈表的基礎操作,在刪除鏈表中節(jié)點時,需要注意的是頭節(jié)點: 如果沒有虛擬頭節(jié)點,那么對頭節(jié)點的刪除需要做不同的處理,head = head-next; 如果有

    2024年02月12日
    瀏覽(25)
  • 【leetcode 力扣刷題】鏈表基礎知識 基礎操作

    【leetcode 力扣刷題】鏈表基礎知識 基礎操作

    在數(shù)據(jù)結構的學習過程中,我們知道線性表【一種數(shù)據(jù)組織、在內(nèi)存中存儲的形式】是線性結構的,其中線性表包括順序表和鏈表。數(shù)組就是順序表,其各個元素在內(nèi)存中是連續(xù)存儲的。 鏈表則是由 數(shù)據(jù)域 和 指針域 組成的 結構體 構成的,數(shù)據(jù)域是一個節(jié)點的數(shù)據(jù),指針域

    2024年02月12日
    瀏覽(22)
  • 棧和隊列(二) 隊列的實現(xiàn),用棧實現(xiàn)隊列,用隊列實現(xiàn)棧,設計循環(huán)隊列

    棧和隊列(二) 隊列的實現(xiàn),用棧實現(xiàn)隊列,用隊列實現(xiàn)棧,設計循環(huán)隊列

    這里的隊列我們使用鏈式隊列,好處就是可以很方便的取出隊頭的元素。 使用順序隊列取出隊頭元素所花費的時間復雜度為O(N),把后面的元素向前移動一個下標所花費的時間。 鏈式隊列的存儲結構: 接口函數(shù)的實現(xiàn) ` leetcode做題鏈接 主要思想:用兩個隊列來實現(xiàn)一個棧

    2024年02月11日
    瀏覽(21)
  • 【leetcode 力扣刷題】回文串相關題目(KMP、動態(tài)規(guī)劃)

    【leetcode 力扣刷題】回文串相關題目(KMP、動態(tài)規(guī)劃)

    題目鏈接:5. 最長回文子串 題目內(nèi)容: 題目就是要我們找s中的回文子串,還要是最長的。其實想想,暴力求解也行……就是遍歷所有的子串,同時判斷是不是回文串,是的話再和記錄的最大長度maxlen比較,如果更長就更新。時間復雜度直接變成O(n^3)。 優(yōu)化的點在于,假設子

    2024年02月09日
    瀏覽(27)
  • 【leetcode 力扣刷題】字符串匹配之經(jīng)典的KMP?。?!

    【leetcode 力扣刷題】字符串匹配之經(jīng)典的KMP!??!

    以下是能用KMP求解的算法題,KMP是用于字符串匹配的經(jīng)典算法【至今沒學懂………啊啊啊】 題目鏈接:28. 找出字符串中第一個匹配項的下標 題目內(nèi)容: 題意還是很好理解的,要在字符串haystack中查找一個完整的needle,即字符串匹配。 暴力求解就是用 兩層循環(huán) :haystack從第

    2024年02月09日
    瀏覽(33)
  • 【leetcode 力扣刷題】字符串翻轉合集(全部反轉///部分反轉)

    【leetcode 力扣刷題】字符串翻轉合集(全部反轉///部分反轉)

    題目鏈接:344. 反轉字符串 題目內(nèi)容: 題目中重點強調(diào)了必須 原地修改 輸入數(shù)組,即不能新建一個數(shù)組來完成字符串的反轉。我們注意到: 原來下標為0的,反轉后是size - 1【原來下標是size - 1的,反轉后是0】; 原來下標是1的,反轉后是size - 2【原來下標是size -2的,反轉后

    2024年02月11日
    瀏覽(33)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包