}}雖然是個基礎題,但寫出來還是略有成就感的,重在思考過程。剛開始是打算用兩個棧,乙個棧用來記錄括號,乙個用來記錄分數,但最後發現,兩個棧向互受到牽制,所以必須合成乙個棧,考慮到分數是整數,符號是字元型,要想合成乙個棧,則可考慮將符號用特殊數字代替,顯然這裡的分數都是正的,所以用-1來表示左括號。遍歷字串,若為左括號則直接入棧,若為右括號,則判定棧頂是正數還是負數,若為正數,則將其擴大兩倍再存入。若為負數,則彈棧,存入1,這裡需要注意,存入1之前,應該先判斷棧內的情況,若為正數則二者相加,若為負數則直接入棧。
}也算是挽回點顏面,在比較客觀地執行用時和記憶體消耗內完成了這題,主要是這題簡單,跟我沒啥關係。。。用了兩個棧,因為以前的資料要保留,而且要想提高效率,還得用另乙個棧儲存每個點的得分。主體思想還是單調棧,保證棧內不增即可。有想過用其它資料結構,但發現還是棧比較合適。
}}說實話這題我沒有想到什麼好的辦法,和暴力解沒什麼區別,很意外的是它竟然沒有判我超時,也許有可取之處吧。大致思路是,這裡的資料值大小反應的是兩種狀態,數值本身沒有意義,所以我們可以統一的用1和-1來表示兩種狀態,而 依題目意思,就成了在一組0,1序列中,找出最長的一段,該段的和大於0。
}}雖然是寫出來了,但執行時間和記憶體花銷都很大,期間還調整了很多bug,反正就很爛吧。只不過想到了乙個方法來在乙個棧中既儲存左括號和右括號,又儲存它們的位置索引,就是用正負來區分是左括號還是右括號,絕對值表示它們的位置,這裡特別強調索引為0的位置,如果只用正負的話這個位置是無法確定是左括號還是右括號的。所以在上述**中,我用了-1代替0,而且它的索引值也不再是絕對值了,需要用-1來減。
棧的中等難度三十題完結了,明天開始困難難度,每日十題打卡第四天,下圖為證。
leetCode每日十題 棧(難度 困難)
因為寫的十棧裡面的題目,所以剛開始在想用棧來寫的時候,是真的一點思路沒有。琢磨著各種可以取到高分的情況,發現那是一環扣著一環,每次決定都受之後分數序列的影響,既然如此,便想到用遞迴來寫 呸,看題解的 說實話,遞迴這東西是真的巧妙啊,你不用去討論如何才能取最大,你只需要告訴計算機,我就是要去最大,然後...
LeetCode每日十題 棧(難度 中等)二
挺有意思的一道題目,上面是我的最初想法,很明顯時間超時了,待我再想想。好吧,我是廢物!大佬思路 我們首先考慮啊a i min j 如果不成立,那麼我們要跳過這個a j 否則我們將棧頂的元素依次出棧,直到棧頂元素stack top 滿足stack top min j 在這之後,我們可以確定棧中的所有元...
leetCode每日十題 堆(難度 中等)
這是我最初的想法,時間超時了,當然很容易想到另一種方法。後面的數是前面某乙個數的2,3,5倍。因為之前沒用過堆,這裡就當堆入門了,直接學習題解的方法。演算法 預計算1690個醜數 初始化預計算用到的陣列nums,堆heap和雜湊表seen跟蹤在堆 現過的元素,避免重複。迴圈計算醜數 彈出堆中最小的數...