日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

不懂算法,还想进大厂?做梦吧

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 不懂算法,还想进大厂?做梦吧 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目有點標題黨了,還請大家見諒。下面切入正題。

算法很重要,但算法也是學起來最難,最令人生畏的。

這篇就來說說算法刷題方面的一些經驗和技巧。

大家在刷題的時候不知道有沒有遇到以下情況。

拿到題目后就開始想著怎么寫代碼,結果寫了大半天,發現越寫越亂,最后就寫不下去了,又或者是,看到題目后,一臉懵逼,完全不知道怎么下手。

其實,學算法,刷題蠻干是不行的,需要遵循科學的方法。

以下的經驗技巧,對于算法新手,或大學沒有搞過ACM,想利用業余時間提升算法能力的同學比較有幫助,對于算法高手和ACM大牛,可能不太適用,僅供參考。

算法不是拼智商

算法不是純粹拼智商的,智商高,就一定很厲害,不夠聰明,就一定不行。算法是一種技能,是可以通過科學合理的方式訓練出來的能力。

智商的高低,當然會有影響,但這個先天因素無法改變,而科學合理的方法是大家都可以掌握的。

所以,首要的一點,是要意識到,算法不是只拼智商的,也是可以經由后天訓練習得的。

難度要循序漸進

有些同學喜歡上來就是干,上來就是終極難度的題目,覺得自己只要做出最難的,其它的就迎刃而解了。這種急于求成的思想要不得。

算法訓練是一個系統工程,需要循序漸進,太過于急功近利,反而容易因做不出難題而產生挫敗感,帶來反效果。

記得我有一個同事就做了次類似的事情。我們當時剛聽說有leetcode,就想上去試試,他上去后就挑了一道困難里面還屬于比較難的題目,結果想了大半天也沒做出來,搞到自己特別沮喪。

你會發現這種做法效率很低,那道題目就算被做出來了,也不代表就可以解出其它的題目。

合理的做法是循序漸進。

如果你本身有基礎,熟練度高,那你刷簡單的leetcode應該是幾分鐘一題,幾分鐘一題的,花不了你多少時間。

如果你刷簡單都花費很長時間,說明熟練度不夠,就更應該從簡單開始。

然后過度到中等,再過度到困難。

這里有個經驗之談。

目前國內大廠的算法考察,基本不會超過leetcode 中等難度,上限難度基本都是leetcode 中等題里面的中等難度(有點拗口,leetcode 中等難度里面也有分檔次)。

如果你能夠再20分鐘內,做出這種難度的題目,國內大廠的算法面試,基本可以暢通無阻。

按算法分類來選題

選擇題目,除了在難度上要循序漸進,還建議在算法上進行劃分。

基本的算法數據結構是有限的。比如說鏈表,二叉樹,二分查找,動態規劃,哈希表。。。

我喜歡按算法的分類來選題和刷題,比如一個時間段,只刷鏈表題,待刷得差不多的時候,接下來再刷二叉樹的題。。。

這種做法可以極大的提高刷題的速度,而且能帶來更好的效果。

一,持續地刷同個類型的題目,可以不斷地鞏固和加深理解。

二,可以更全面地接觸這個數據結構,算法的各個變種,這會促使你對這個數據結構,算法的理解更加全面和深刻,學習的效率會更高。

所以在一段時間內,持續地刷特定類別的題目,可以帶來事半功倍的效果。

當然,在能力已經比較強的時候,可以采用打散的方式來刷題,可以更好地鍛煉思維的靈活性和應變能力,但初期或能力較弱的時候,按分類選題,是比較好的。

解題三部曲

在具體做題的時候,可以采用以下三個步驟來進行。

拿到題目后,不要立馬開干,想著下面的三個步驟,一步一步地來。

1. 看懂題目

看懂題目。有的題目很直接,直接告訴你要解決的問題是什么,題目本身甚至都包含了對應的數據結構和需要用到的算法;有的題目很隱晦,看了半天不知道它到底要解決什么問題,可以用什么算法和數據結構來解。所以,看到題目后,一定要先確保自己理解清楚了。

我的一個經驗是,拿到一個題目后,看5分鐘,如果5分鐘之內看不懂,我就mark 下來,留到后面再做,要不很影響刷題的心情。

不過就leetcode 來說,這樣的題目不多。基本都能在再5分鐘內看懂。

2.分析,推導解法

分析推導題目的解法。

這個步驟要有意識地單獨拎出來,不要跟編碼步驟混淆在一起。也就是說,你在分析推導題目解法的時候,不要去想任何實現相關地事情,不用去想代碼怎么寫,不用去想要用什么庫,定義什么變量,用多少層循環,都不要想,就想著在邏輯上,這道題目要怎么解。

這樣做可以極大地降低你的心智負擔,使你高效地想出題目的解法。對于如何將想法變成代碼,可以留在下一個步驟,單獨來進行。

3.將思路轉換為代碼

當你確定題目都已經理解,并且分析推導出了題目的解法后,你才開始來思考如何將自己的思路轉換成代碼。是地,將思路轉換成代碼,可以是一個單獨地步驟,在實際工作中,其實也是很重要的一個能力。

有時,將一個思路轉換成算法是很容易且自然的;但有時,有些思路轉換成代碼,是很有難度的事情。

或者你有體會,分析推導只用了不到十分鐘,結果代碼寫了半小時還寫不完整。

怎么定義變量,保存狀態,用遞歸,還是用循環加輔助數據結構等等,都是將思路轉換成代碼要做的事情。

這個能力也需要刻意地去練習。

算法的封裝

接下來,說點更細節的東西,算法的封裝。

軟件設計里面,最關鍵的思想就是抽象和封裝了。

其實解題也可以用到這種思路。

比如一道題目的正確解法是先排序,再進行二分查找,那你的腦子里面只要記得,快速排序和二分查找,就可以了,不需要去想,快速排序和二分查找的具體實現。

就像我們在寫代碼的時候,遇到排序,查找,我們一般都直接使用了現成的函數庫,而不需要自己動手再寫一遍。這個是代碼層面封裝帶來的好處,思維層面的封裝也是一樣的道理。

這種封裝思想在做題的時候可以極大地減輕我們的心智負擔,使得自己的腦力可以發揮在問題的核心點上。

用封裝的思維去解題,你的解題能力會有快速地提升。

封裝的思想可以用于 “2.分析,推導解法”?的過程,在 “3.將思路轉換為代碼”?的過程,更是可以用語言內置的算法函數,數據結構來直接實現,也使得從思路轉換到代碼的過程更加的直觀和自然。

在實際的面試或比賽中,除非有特殊說明,一般都可以放心地使用語言的內置算法和數據結構。

然后你可能會問,對于像排序,查找這些基礎的算法應該怎么對待呢?我的建議是可以把它們當作重要算法來刻意練習。

快排,快搜,堆排序等,我們可以稱它們為元算法。

對于這些算法的刻意練習。一開始的時候,要看算法書的描述,確保自己理解了算法的思路,然后嘗試自己實現一遍。

實在寫不出來,就參照或者直接抄。一個算法花幾天的時間,大部分人都是可以理解并自己實現出來的。(排除一些特別難的,需要更長的時間)。

保持持續的動力

算法能力的提升,是一個長期的事情,需要持續地學習和做題,而刷題又是個比較枯燥的過程,在遇到難題的時候,很容易產生挫敗感,甚至導致直接放棄。

所以這里需要特別關注刷題時的正反饋。如果你老是無法解出某個難度或某個類別的題目的時候,你就要考慮降低難度,或者安排額外的時間,去更全面的復習特定的算法和數據結構了。

注意不要死磕!算法學習,特別講求方法和技巧,死磕非但磕不過去,還可能留下對算法的心里陰影,導致學習障礙。

總結

首先算法不是只拼智商的,是可以通過后天的刻意練習掌握的一種能力。

剛上手的時候,難度上需要循序漸進,最好能夠按算法分類來刷題。

解題的時候,建議按這三個步驟來?

1,看懂題目

2,分析,推導解法?

3,將思路轉換為代碼。

在更細節方面,封裝的思想也可使用在算法上面,可以極大地降低我們的心智負擔,提升解題的效率。

最后是要注意做題過程中的正反饋,確保自己能持續地做下去。

希望這里分享的經驗技巧,能給大家帶來幫助!

總結

以上是生活随笔為你收集整理的不懂算法,还想进大厂?做梦吧的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。