leetcode-用兩個棧實現(xiàn)隊列

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

來源:力扣(LeetCode)
鏈接:https://leetcode.cn/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。

題目如上,出處leetcode官網(wǎng)
由于我是Android開發(fā)的原因,最開始采用的是kotlin語言編寫

    class CQueue() {
//新建一個輸入棧
        val s = Stack<Int>()
//一個輸出棧
        val s2 = Stack<Int>()
        fun appendTail(value: Int) {
            if (s.empty()) {
                while (!s2.empty()) {
                    s.add(s2.pop())
                }
            }
            s.add(value)
        }

        fun deleteHead(): Int {
//如果輸出棧沒有內(nèi)容,則將輸入棧反轉(zhuǎn)并壓入輸出棧,然后pop即可達到隊頭刪除的要求
            if (s2.empty()) {
                while (!s.empty()) {
                    s2.add(s.pop())
                }
            }
            if (s2.empty()){
                return -1
            }
            return s2.pop()
        }
    }

無疑這個寫法他沒毛病,但是當(dāng)我查看官方解體之后發(fā)現(xiàn)3處可優(yōu)化的地方
1、在appendTail函數(shù)執(zhí)行時可以直接添加,不需要將s2中的數(shù)據(jù)反轉(zhuǎn)回來。原因我想只需要稍微思考一下就能明白,這里不贅述.
2、應(yīng)該使用push進行添加,因為棧的定義是后進先出,add有歧義,無關(guān)性能,單純的覺得用push更好
3、應(yīng)該使用ArrayDeque代替Stack

為什么要用ArrayDeque代替Stack?

一句話,stack性能低,stack繼承自Vector,vector對函數(shù)加了鎖;
關(guān)于ArrayDequeStack的更多知識請參閱 https://blog.csdn.net/deng_hui_long/article/details/120639629。

最后,推薦使用java解答(我只會java和kotlin),根據(jù)leetcode的提交記錄顯示,java的運輸速度和內(nèi)存消耗都遠遠小于kotlin


20221011164239.jpg

最終的代碼

class CQueue {

    public CQueue() {

    }
    private Deque<Integer> inQ = new ArrayDeque<Integer>();
    private Deque<Integer> outQ = new ArrayDeque<Integer>();

    public void appendTail(int value) {
        inQ.push(value);
    }

    public int deleteHead() {
        if (outQ.isEmpty()) {
            if (inQ.isEmpty()) {
                return -1;
            }
            while (!inQ.isEmpty()) {
                outQ.push(inQ.pop());
            }
        }
        return outQ.pop();
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容