成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[Leetcode] Implement Stack using Queues 用隊(duì)列實(shí)現(xiàn)棧

ivan_qhz / 2448人閱讀

摘要:雙隊(duì)列法復(fù)雜度時(shí)間空間思路和類似,我們也可以用兩個(gè)隊(duì)列來(lái)模擬棧的操作。當(dāng)時(shí),我們將數(shù)字進(jìn)非空的隊(duì)列就行了。操作和一樣,區(qū)別在于我們拿到最后一個(gè)數(shù)后,還要再把它進(jìn)另一個(gè)隊(duì)列中。

雙隊(duì)列法 復(fù)雜度

時(shí)間 O(N) 空間 O(N)

思路

和Implement Queue using Stack類似,我們也可以用兩個(gè)隊(duì)列來(lái)模擬棧的操作。當(dāng)push時(shí),我們將數(shù)字offer進(jìn)非空的隊(duì)列就行了。當(dāng)pop時(shí),因?yàn)橐玫氖顷?duì)列最后一個(gè)數(shù),我們先將它前面的數(shù)offer進(jìn)另一個(gè)隊(duì)列,然后多帶帶拿出最后一個(gè)數(shù),并且不再offer進(jìn)另一個(gè)隊(duì)列,這樣,另一個(gè)隊(duì)列就少了最后一個(gè)數(shù),而我們也拿到了最后一個(gè)數(shù),而本來(lái)的隊(duì)列就變成空了,等待下次的pop操作來(lái)填滿。top操作和pop一樣,區(qū)別在于我們拿到最后一個(gè)數(shù)后,還要再把它offer進(jìn)另一個(gè)隊(duì)列中。

代碼
class MyStack {
    
    Queue queue1;
    Queue queue2;
    int size;
    
    public MyStack(){
        this.queue1 = new LinkedList();
        this.queue2 = new LinkedList();
        this.size = 0;
    }
    
    // Push element x onto stack.
    public void push(int x) {
        if(queue1.isEmpty()){
            queue2.offer(x);
        } else {
            queue1.offer(x);
        }
        size++;
    }

    // Removes the element on top of the stack.
    public int pop() {
        if(size == 0){
            return -1;
        }
        int res = 0;
        // 將前面的數(shù)都o(jì)ffer進(jìn)另一個(gè)隊(duì)列,然后拿出最后一個(gè)數(shù)
        if(queue1.isEmpty()){
            for(int i = 0; i < size - 1; i++){
                queue1.offer(queue2.poll());
            }
            res = queue2.poll();
        } else {
            for(int i = 0; i < size - 1; i++){
                queue2.offer(queue1.poll());
            }
            res = queue1.poll();
        }
        size--;
        return res;
    }

    // Get the top element.
    public int top() {
        if(size == 0){
            return -1;
        }
        // 先執(zhí)行pop
        int top = pop();
        // 然后將pop出來(lái)的數(shù)再塞回隊(duì)列就行了
        if(queue1.isEmpty()){
            queue2.offer(top);
        } else {
            queue1.offer(top);
        }
        // 注意size也要加1
        size++;
        return top;
    }

    // Return whether the stack is empty.
    public boolean empty() {
        return size == 0;
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/64618.html

相關(guān)文章

  • LeetCode 225:隊(duì)列實(shí)現(xiàn) Implement Stack using Queues

    摘要:下面是入棧時(shí)代碼獲得隊(duì)列長(zhǎng)度反轉(zhuǎn)次數(shù)為隊(duì)列長(zhǎng)度減一反轉(zhuǎn)語(yǔ)言沒有棧和隊(duì)列數(shù)據(jù)結(jié)構(gòu),只能用數(shù)組或雙端隊(duì)列實(shí)現(xiàn)。這類編程語(yǔ)言就壓根不需要用隊(duì)列實(shí)現(xiàn)?;蛴脳?shí)現(xiàn)隊(duì)列這種問題,因?yàn)闂:完?duì)列本身就必須借助實(shí)現(xiàn)。 題目: 使用隊(duì)列實(shí)現(xiàn)棧的下列操作: push(x) -- 元素 x 入棧 pop() -- 移除棧頂元素 top() -- 獲取棧頂元素 empty() -- 返回棧是否為空 Impl...

    AlanKeene 評(píng)論0 收藏0
  • leetcode225 implement stack using queues

    摘要:題目要求使用隊(duì)列來(lái)模擬實(shí)現(xiàn)一個(gè)棧。棧是指先進(jìn)后出的數(shù)據(jù)結(jié)構(gòu),而隊(duì)列則是先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu)。隊(duì)列的包括在隊(duì)列尾插入數(shù)據(jù),輸出隊(duì)列頭的數(shù)據(jù),查看隊(duì)列的長(zhǎng)度,隊(duì)列是否為空。 題目要求 Implement the following operations of a queue using stacks. push(x) -- Push element x to the back of que...

    binta 評(píng)論0 收藏0
  • LeetCode 232:實(shí)現(xiàn)隊(duì)列 Implement Queue using Stacks

    摘要:題目使用棧實(shí)現(xiàn)隊(duì)列的下列操作將一個(gè)元素放入隊(duì)列的尾部。用棧實(shí)現(xiàn)隊(duì)列,可以用兩個(gè)棧完成題解。入隊(duì)列時(shí)用存入節(jié)點(diǎn),出隊(duì)列時(shí)內(nèi)節(jié)點(diǎn)順序出棧壓入中。這類編程語(yǔ)言就壓根不需要用隊(duì)列實(shí)現(xiàn)?;蛴脳?shí)現(xiàn)隊(duì)列這種問題,因?yàn)闂:完?duì)列本身就必須借助實(shí)現(xiàn)。 題目: 使用棧實(shí)現(xiàn)隊(duì)列的下列操作: push(x) -- 將一個(gè)元素放入隊(duì)列的尾部。 pop() -- 從隊(duì)列首部移除元素。 peek() -- 返回隊(duì)...

    cloud 評(píng)論0 收藏0
  • [Leetcode] Implement Queue using Stacks 實(shí)現(xiàn)隊(duì)列

    摘要:注意的方法是和,實(shí)際上我們應(yīng)該實(shí)現(xiàn)的是和或者和,的實(shí)現(xiàn)和是一樣的,但將改為時(shí),我們要先把到的元素保存,然后再?gòu)棾鲚敵鰲#缓蠓祷剡@個(gè)保存的元素。 Implement Queue using Stacks Implement the following operations of a queue using stacks. push(x) -- Push element x to th...

    Martin91 評(píng)論0 收藏0
  • leetcode232 Implement Queue using Stacks

    摘要:題目要求通過隊(duì)列實(shí)現(xiàn)一個(gè)棧的功能。棧的為壓入棧頂,出棧,棧頂元素,棧是否為空。重復(fù)上述的操作。但是當(dāng)需要彈出元素時(shí),則從桶彈出。這樣,下次加入的元素必然全部位于桶后的所有元素,而桶中的元素也能保證位輸入順序。極大的減少了不必要的入棧出棧。 題目要求 Implement the following operations of a queue using stacks. push(x) ...

    golden_hamster 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<