雜談 - 力扣競(jìng)賽排位上Knight啦與后續(xù)計(jì)劃

上周的周賽和雙周賽都四題全通過(guò)了(也就是他們常說(shuō)的 AK——All Kill,算上再之前周賽那次 AK,連著三次了),加上之前積分就已經(jīng) 1853,力扣也有個(gè)統(tǒng)計(jì)門(mén)檻分?jǐn)?shù)的討論貼(鏈接: https://leetcode.cn/circle/discuss/SKzRis/ )說(shuō)明最近分界就在 1860 左右,所以估計(jì)這次出分以后應(yīng)該就可以上 Knight 段位了。
果然今天看了一眼力扣個(gè)人資料頁(yè)面(id:ZeromaX https://leetcode.cn/u/zeromax/ ),發(fā)現(xiàn)已經(jīng)出結(jié)果了,目前已經(jīng)到了 Knight。就打算寫(xiě)篇文章紀(jì)念一下,順便整理一下最近的一些想法。
不過(guò)發(fā)現(xiàn)上周的雙周賽估計(jì)是因?yàn)楫?dāng)時(shí)線上測(cè)試環(huán)境有問(wèn)題,所以沒(méi)有算分。力扣賠我腦細(xì)胞和頭發(fā)?。ㄐΓ?/p>
上周末的周賽和雙周賽,最后一題的困難題都是類似腦筋急轉(zhuǎn)彎的題目(第 303 場(chǎng)周賽 2354. 優(yōu)質(zhì)數(shù)對(duì)的數(shù)目 是必須想到兩個(gè)數(shù)按位與和按位或的 1 個(gè)數(shù)的和其實(shí)就是兩個(gè)數(shù)二進(jìn)制 1 的總個(gè)數(shù),第 83 場(chǎng)雙周賽 2350. 不可能得到的最短骰子序列 則是必須想到題目等效于用貪心的思想去計(jì)算每次循環(huán)中所有數(shù)字出現(xiàn)一次的總次數(shù)),想了好久,都是比賽快結(jié)束才做出來(lái)的。但是其實(shí)如果有思路的話,代碼就很簡(jiǎn)單,所以想了半天最后想出來(lái)以后回過(guò)頭來(lái)看就特別折磨。

力扣排位
力扣所謂 Knight 以及更高階的 Guardian 段位,其實(shí)就是指競(jìng)賽積分 ≥1600 的用戶中,根據(jù)比例 5%(Guardian)、20%(Knight)、75%(暫無(wú))設(shè)定三檔段位,段位每周比賽結(jié)束后計(jì)算一次。(具體規(guī)則在這里: https://leetcode.cn/circle/discuss/0fKGDu/ )
之前 2020 年做力扣和參加周賽時(shí)還沒(méi)注意有這么一回事。最近因?yàn)樵趯W(xué) Scala,利用力扣在刷題中練習(xí),所以就也開(kāi)始用 Scala 重新開(kāi)始打打周賽練練手;每次比賽結(jié)束時(shí)看周賽排名里面前幾名大佬的個(gè)人頁(yè)面,才發(fā)現(xiàn)有這么個(gè)段位。然后就想著這段時(shí)間怎么用 Scala 上分整一個(gè),參加了這么幾周,這次終于還是拿到了 Knight。
不過(guò)不得不提一點(diǎn),這次上 Knight 沒(méi)有花費(fèi)太多的時(shí)間,一方面是自己已經(jīng)在力扣上刷過(guò)這么久的算法題了,相比 2020 年的自己肯定也更加熟練;另一方面是 Scala 確實(shí)比 Java 簡(jiǎn)潔多了,加上更加豐富的鏈?zhǔn)秸{(diào)用 API,可以保護(hù)自己的鍵盤(pán)少被敲打幾次(其實(shí)就是敲起來(lái)快啦)。
要問(wèn)心得的話,其實(shí)沒(méi)什么復(fù)雜的經(jīng)驗(yàn)。總結(jié)起來(lái)就很簡(jiǎn)單:熟能生巧。做得多了,其實(shí)很多算法思想套路大致頭腦里就有個(gè)印象。當(dāng)然,第一次接觸的時(shí)候免不了還是得認(rèn)真學(xué)習(xí)和思考一下,之后通過(guò)題目的重復(fù)練習(xí)來(lái)加深印象。
所以其實(shí)我個(gè)人習(xí)慣是如果題目標(biāo)簽里面有沒(méi)接觸過(guò)的,或者是題目想了一段時(shí)間沒(méi)有思路的話,那還是直接看題解吧,看懂了再自己按思路寫(xiě)一遍。我自己一般如果有空的話,就自己還嘗試著整點(diǎn)花活,看看題解或者自己的代碼有沒(méi)有什么可以優(yōu)化的或者其他解法。然后一段時(shí)間后,可以再重新做一下之前的題(為了新鮮感,也可以學(xué)個(gè)相關(guān)的新語(yǔ)言來(lái)重新做,一邊練新語(yǔ)言的語(yǔ)法,一邊復(fù)習(xí)算法思路)。
以后感覺(jué)要上 Guardian 的話,那要花的功夫估計(jì)不少,畢竟最低分都要 2200 左右。自己還是慢慢刷困難的題吧,讓自己算法思考能力變得更強(qiáng)才是真的(成龍有云:“力扣排位”里的你再?gòu)?qiáng)大也是假的)。
要提高的話,看網(wǎng)上大佬們的經(jīng)驗(yàn)分享,之后有空就得去 Codeforces、洛谷上面刷刷那些“不那么面試”的算法題了。之所以這么說(shuō),主要也是因?yàn)?Codeforces、洛谷上面的題目偏向算法競(jìng)賽。自己畢竟也不是在校生了,從功利的角度,那多少是有點(diǎn)浪費(fèi)時(shí)間的(甚至自己刷力扣困難算法題的行為,從社招面試角度來(lái)考慮都有點(diǎn)事倍功半,一般社招估計(jì)都難得達(dá)到這種高度,側(cè)重點(diǎn)一般還是工程經(jīng)驗(yàn))。不過(guò)太功利就沒(méi)意思了,之后感興趣又有時(shí)間的話就試試?。ó?dāng)然,這個(gè)“之后”可能很短,也可能會(huì)是比較長(zhǎng)的一段時(shí)間,或者就直接鴿了。隨緣吧)
后續(xù)計(jì)劃
之后估計(jì)周末有時(shí)間還是繼續(xù)打一打比賽,畢竟把周賽當(dāng)作游戲上分還是比較有正反饋的(還不會(huì)陷入打游戲沖段位時(shí)那種感覺(jué)自己行為無(wú)意義的懷疑)。不過(guò)平時(shí)估計(jì)算法題就會(huì)少刷一點(diǎn)了,最近的計(jì)劃是多整理點(diǎn)工作相關(guān)的代碼,自己工程代碼方面也是比較薄弱。
之所以這么想,可能也是前面我所說(shuō)的那種功利的思想作祟(還是得恰飯的嘛~);但正如上次雜談里面提到的,我一直有個(gè)不太好的習(xí)慣:閑下來(lái)的時(shí)間不太愿意去寫(xiě)自己的項(xiàng)目。工作這么久,和編程相關(guān)的堅(jiān)持下來(lái)的習(xí)慣,也就是力扣上做做題和 Git 倉(cāng)庫(kù)上提交點(diǎn)力扣做題記錄和讀書(shū)筆記。
觀察自己之所以力扣和 Git 倉(cāng)庫(kù)可以堅(jiān)持零零星星做點(diǎn)題和提交點(diǎn)東西的原因,主要還是自己把類似打游戲每日任務(wù)那種心態(tài)遷移過(guò)去了,雖然慢慢養(yǎng)成了一個(gè)習(xí)慣,但是問(wèn)題就是這樣零散的學(xué)習(xí)很不成體系。最近力扣上集中刷算法題算是了結(jié)了一部分算法學(xué)習(xí)方面的任務(wù),接下來(lái)就還是需要趁熱打鐵,抓緊自己現(xiàn)在比較能夠沉下心來(lái)的狀態(tài),針對(duì)性地把個(gè)人工程代碼庫(kù)比較缺失的問(wèn)題解決一下。
這里面的原因不僅僅是面試會(huì)涉及到項(xiàng)目介紹之類的考慮,其實(shí)一大部分緣由也是出于自己補(bǔ)實(shí)踐能力短板的目的——平時(shí)工作過(guò)程中,很多時(shí)候就是在原有的工程代碼框架下填細(xì)節(jié),大的改動(dòng)和重構(gòu)其實(shí)也不敢做(沒(méi)有配套的單元測(cè)試)。不少時(shí)候自己根據(jù)很多軟件工程的書(shū)上看到的知識(shí),感覺(jué)到其中的問(wèn)題,但困于自己實(shí)踐的少,也不太敢在公司代碼上瞎搞。
另一方面就是對(duì)于很多工作中涉及不到的工具、框架,缺少一個(gè)自己熟悉的較大項(xiàng)目去實(shí)踐。那么很多時(shí)候?qū)W習(xí)就停留在 Demo 大小的項(xiàng)目了,距離真正靈活運(yùn)用還有很遠(yuǎn)。有一個(gè)個(gè)人的項(xiàng)目用于隨便實(shí)驗(yàn),還是方便不少。
這個(gè)想法倒是好久以前就有了,但是問(wèn)題就是一直很難真正堅(jiān)持。屬于是“間歇性躊躇滿志,持續(xù)性混吃等死”了。這次希望可以真正寫(xiě)出點(diǎn)東西吧……