【前言】
剛剛打完比賽突破以往的上限了,很開心所以就想來發文~介紹一下LeetCode比賽機制,每週都有一場比賽,每兩週會多一場雙週賽,也就是這次參加的比賽,每場比賽時長90分鐘,要完成4題,題目由簡單到難排序,解題後得取得的分數也不太一樣(依難度有所不同),比賽結束後優先依照分數排名,同分照完成時間排名,正式繳交時出錯的話會罰時5分鐘,結束後會對選手的Contest Rating做增減,機制我不太了解,有看到一篇文章說Rating是根據與你名次差不多的其他用戶的Rating來決定增減分的。
這題我覺得真的很可惜,看到題目當下我想到可以用前綴和來解,範例測資也過了,但最後比賽結束才發現可以優化時間與空間複雜度,沒想錯的話空間與時間都可以再少一半,但時間真的來不及,最後再處理超時問題時比賽贏來了結束......
更新:後來看其他人的解法是用map解qq
LeetCode是在高三升大學的暑假開始刷的,當時因為申請的科技大學書審成績都給我很低分,就賭氣開始刷了xd,到現在也剛破800題,雖然有些題目當初沒很認真理解就照別人答案寫一遍繳交了,但總體而言刷題對我的幫助還是挺大的,尤其是經過這次的比賽,能感受到一小部分的積累已經內化成自己的工具/武器了,這次能突破三題時真的很開心,但也為沒能把握住這次的第四題感到可惜(相比先前的第四題我覺得算簡單了),總之希望我能繼續堅持下去。
【主文】
這是我第四次參加LeetCode上的比賽,上週才發現比賽的題目在比賽結束後會加到題庫裡,加上Rating排名讓我感覺像在打積分很不錯,所以這次也報名了,前三次參加的成績都是(2/4題),第三次還掉分了,這次本來想拚一波把分數題上去,但比賽剛開始我就因為同時連開四題的分頁被網站阻擋存取,導致前30分鐘五都讀不了題目......
當時心情真的很糟,可以讀題後伴隨著多多少少的罰時與debug完成了前兩題,完成第二題後我是松一口氣的,我對自己的要求是至少解兩題,後面第三題經過嘗試最後也順利解出來了,最後剩下12分鐘拚第四題,最後敗在時間與空間超過限制的修改地獄。
我感覺如果沒有被拖到時間就能解出最後一題了......當然這都是後話了,至少之後的比賽我會注意不要再多開分頁。
當時心情真的很糟,可以讀題後伴隨著多多少少的罰時與debug完成了前兩題,完成第二題後我是松一口氣的,我對自己的要求是至少解兩題,後面第三題經過嘗試最後也順利解出來了,最後剩下12分鐘拚第四題,最後敗在時間與空間超過限制的修改地獄。
我感覺如果沒有被拖到時間就能解出最後一題了......當然這都是後話了,至少之後的比賽我會注意不要再多開分頁。
【關於題目】
比賽網頁
比賽網頁
簡單敘述一下我的解法,可能不是最佳,歡迎各位指教。
1.Longest Alternating Subarray
題目內容:找數字前後關係連續為[n,n+1,n,n+1]的子陣列
題目內容:找數字前後關係連續為[n,n+1,n,n+1]的子陣列
我用陣列存目前的連續長度並更新變數ans,後來發現好像不需要用陣列存也能過,但當時很緊張就沒多想。
2.Relocate Marbles
題目內容:照題目要求移動某袋子的所有彈珠到另一個袋子,回傳移動結束後擁有彈珠的袋子數量。
題目內容:照題目要求移動某袋子的所有彈珠到另一個袋子,回傳移動結束後擁有彈珠的袋子數量。
用map依照題目要求操作就過了,只是一開始沒意識到移動到同個袋子的情況所以被罰時了。
3.Partition String Into Minimum Beautiful Substrings
題目內容:判斷題目給的字串(由0和1組成)能否分割成數個1開頭且為5的次方的二進位數字,如果能則回傳最小分割數。
這題我透過遍歷所有子字串+動態規劃解,因為之前有解過類似的題目(字串分割+條件判斷),所以對我來說解得很順手,不過誤解題目意思以為是5的倍數導致花了一點時間。
這題我透過遍歷所有子字串+動態規劃解,因為之前有解過類似的題目(字串分割+條件判斷),所以對我來說解得很順手,不過誤解題目意思以為是5的倍數導致花了一點時間。
4.Number of Black Blocks
題目:給一個二維陣列並指定黑格子的位置,返回以2x2窗格掃陣列後得到雙格中黑格子為[0,1,2,3,4]的數量。
題目:給一個二維陣列並指定黑格子的位置,返回以2x2窗格掃陣列後得到雙格中黑格子為[0,1,2,3,4]的數量。
這題我覺得真的很可惜,看到題目當下我想到可以用前綴和來解,範例測資也過了,但最後比賽結束才發現可以優化時間與空間複雜度,沒想錯的話空間與時間都可以再少一半,但時間真的來不及,最後再處理超時問題時比賽贏來了結束......
更新:後來看其他人的解法是用map解qq
【結語】