LeetCode每日十題 棧(難度 中等)二

2021-10-24 01:59:33 字數 3065 閱讀 1487

}挺有意思的一道題目,上面是我的最初想法,很明顯時間超時了,待我再想想。。。好吧,我是廢物!

大佬思路:我們首先考慮啊a[i]min[j],如果不成立,那麼我們要跳過這個a[j],否則我們將棧頂的元素依次出棧,直到棧頂元素stack[top]滿足stack[top]>min[j]。在這之後,我們可以確定棧中的所有元素都大於min[j]因此如果此時棧頂的元素和j可以滿足132模式,那麼我們就找到了一組合法的滿足132模式的i,j,k,否則我們繼續尋找,此時需要吧a[j]入棧。如果在便利結束後,我們仍然沒有找到滿足132模式的i,j,k,那麼我們需要返回false。**如下

}這題雖然沒啥難度,但個人認為還是比較典型的。主要思路是,遍歷pushed序列,如果何popped序列中的元素值相等,則在pushed序列中彈出該元素,這裡是個while迴圈。直到對應元素不等,則將pushed序列i+1至下乙個元素。最後若棧為空則返回true,否則false。

}}總體來說還是挺簡單的,像我這種菜雞都能一遍過。主要還是圍繞棧來展開的,如果開始進入的為負數,那麼直接將它存入最後的結果當中,因為它不肯能**,追不上,遍歷到第乙個正數時,將其入棧。若接下來遇到的都是正數,也直接入站,若為負數,則比較絕對值大小,按情況分析,這裡是乙個while迴圈,因為乙個大的負數,能把棧內路過的小正數都給炸沒了,而不是只炸一次,若炸完了棧中所有正數,負數還存活的話,就相當於一開始進入的為負數,那麼這時就要將其存入最後的結果當中,不必入棧。遍歷完之後,棧要麼為空,要麼全是正數,誰都追不上誰,最後結果要加上這剩餘棧中的正數。這裡有個小問題,返回的陣列大小要和它包含有效資料的個數一致,空間不能開大了,否則會自動用0填充。

}}好像是和上面找下乙個最大元素題是一樣的,用的是單調棧,具體就不重複介紹了。

有點意思,至少可以在自己的**裡找到演算法的感覺了,每日十題打卡第三天,以下圖為證。

leetCode每日十題 棧(難度 困難)

因為寫的十棧裡面的題目,所以剛開始在想用棧來寫的時候,是真的一點思路沒有。琢磨著各種可以取到高分的情況,發現那是一環扣著一環,每次決定都受之後分數序列的影響,既然如此,便想到用遞迴來寫 呸,看題解的 說實話,遞迴這東西是真的巧妙啊,你不用去討論如何才能取最大,你只需要告訴計算機,我就是要去最大,然後...

leetCode每日十題 棧(難度 中等)三

雖然是個基礎題,但寫出來還是略有成就感的,重在思考過程。剛開始是打算用兩個棧,乙個棧用來記錄括號,乙個用來記錄分數,但最後發現,兩個棧向互受到牽制,所以必須合成乙個棧,考慮到分數是整數,符號是字元型,要想合成乙個棧,則可考慮將符號用特殊數字代替,顯然這裡的分數都是正的,所以用 1來表示左括號。遍歷字...

leetCode每日十題 堆(難度 中等)

這是我最初的想法,時間超時了,當然很容易想到另一種方法。後面的數是前面某乙個數的2,3,5倍。因為之前沒用過堆,這裡就當堆入門了,直接學習題解的方法。演算法 預計算1690個醜數 初始化預計算用到的陣列nums,堆heap和雜湊表seen跟蹤在堆 現過的元素,避免重複。迴圈計算醜數 彈出堆中最小的數...