推薦一種通過刷leetcode來增強技術功底的方法

2021-01-07 網易

  背景

  如果前人認為這是一種學習提高或者檢驗能力的成功實踐。而自己目前又沒有更好的方法,那就不妨試一試。

  而不管作為面試官還是被面試者,編碼題最近越來越流行。而兩種角色都需要思考的問題是希望考察什麼能力,通過什麼題目,需要達到怎樣的程度可以說明面試者具有了這樣的能力。

  而要找到上面這些問題的答案,比較好的方式除了看一些理論性文章和接受培訓之外,自己動手刷一刷leetcode切身實踐一下不失為一個不錯的方式。而既然要花精力去做這件事情,那就需要解決一個問題:我從中可以獲得什麼提高。以下是個人的一些經驗和感受。

  收益

  對底層有了更深入的了解和思考

  leetcode一些常見題也是平時工作中常用的一些底層數據結構的實現方法。

  先舉個大家使用比較多的算法:LRU(最近最少使用),在Java的實現中實現特別簡單。只是使用了LinkedHashMap這種數據結構。而如果看一些開源包裡LRU的實現,發現也是這樣實現的。實際上動手實現一遍,LRU就再也不會忘了。

  

  再舉個數據結構的例子:字典樹又叫前綴樹。它是搜索和推薦的基礎。標準點的定義是:

  字典樹又稱單詞查找樹,Tire樹,是一種樹形結構,是一種哈希樹的變種。典型應用是用於統計,排序和保存大量的字符串(但不僅限於字符串),所以經常被搜尋引擎系統用於文本詞頻統計。它的優點是:利用字符串的公共前綴來減少查詢時間,最大限度地減少無謂的字符串比較,查詢效率比哈希樹高。

  因為之前做過搜尋引擎,一直也對這塊很有興趣,所以對它底層知識的補充對個人而言,感覺深度有增加。

  

  養成評估時空開銷的習慣

  我刷leetcode必看官方解答裡估算的時間和空間複雜度。這也是作為一個架構師的必備基本能力。

  數組、哈希這些因為數據的位置不需要進行查找,只需要算數計算就可以得到,所以它們的時間複雜度是O(1)。

  鍊表如果直接在頭部或者尾部插入,因為不需要查找,所以時間複雜度也是O(1),但是定位的話因為涉及查找,按遍歷查找來算是log(n)。所以對於jdk1.7之前,hashmap底層採用的是數組+鍊表的數據結構。所以如果不算哈希衝突和擴容的話,獲取和插入數據的時間複雜度是O(1);如果出現了哈希衝突,則插入因為是頭部插入,時間複雜度還是O(1);獲取時間複雜度因為涉及先查找,所以是O(n),這個n代表衝突的數量。

  對於在有序數據中進行查找,因為可採用二分查找等優化,時間複雜度可降到log(n).

  對於遞歸調用,如果遞歸方法內進行2次調用。對於層數n來說,時間複雜度是2的n次方。舉個例子就是一個數等於前面兩個數之和。當然,如果是前面3個數之和,不進行優化的情況下時間複雜度就是3的n次方。

  對於一個n*m的二維數組等需要進行嵌套循環遍歷的,時間複雜度是O(n*m),有個特殊情況是n*m,這時候時間複雜度是n的平方。

  對於全排列的情況,時間複雜度是O(n!)。

  代碼簡化的方法

  我習慣的一種學習方法是先做題,有了一定自己的總結和思考之後,再看書學習別人的總結思考方法。對於刷leetcode相關性高,也比較受認可的書是《Cracking the Coding interview(6th)》,中文版翻譯是《程式設計師面試金典》。這本書對於面試官和面試者來說讀了都會有一定的收穫。

  我讀了這本書,對我印象最深的是介紹了兩種代碼優化的方法:BUD和BCR。

  BUD

  BUD是瓶頸、不必要工作、重複工作 三個詞組首字母的縮寫。

  

  作者提出拿到一道編程題,可先嘗試用暴力解法將題目寫出來,之後找到解法的性能瓶頸,針對瓶頸進行優化,之後再去掉不必要的工作,最後去掉重複的工作。

  這個經典的編程優化方法不只可應用於編程,還可應用於整個程序的優化,也是最常規的優化方法。

  BCR

  BCR是Best Conceivable Runtime的縮寫,意思是想知道自己可以優化到什麼程度,先估算可達到的最優情況。

  比如:在一個無序數組中,查找兩個兩個相同的數。直覺來說如果找到這兩個數,最起碼需要將每個數都遍歷一遍,所以可達到的最優情況是O(n),無論怎麼優化,都不可能比這個更好。所以這就是優化的上限。

  這本書裡還介紹了其他的優化方法如:使用額外數據結構、通過構建測試用例、根據題目的限制和提示來尋找線索,大家看這本書的時候可以了解下。

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺「網易號」用戶上傳並發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關焦點

  • leetcode專項刷題(數組)-子數組最大平均數/最大子序和/數組的度
    本文將繼續分享leetcode上數組專項的刷題,也是基礎題,但是屬於必須會的那種範疇。是關於基礎數組專項的分享最後一文,給自己留個底。算法都是基於python。思路1.肯定先統計數量,我最開始用count函數,哎呀我去,這個效率真的是不行,後來改用字典.get方法計數(Counter方法應該也行,不知道效率,沒測試)2.思考如何統計包含度的列表長度,其實可以想像出度所指向的值,一定是首尾都是這個數
  • Leetcode: NO.8 字符串轉換整數 (atoi)
    【華為雲·年終盛典】闖關答題 贏華為平板電腦大禮包 夠膽你就來!>>>
  • LeetCode-72.編輯距離(Edit Distance)
    (刪除 't')inention -> enention (將 'i' 替換為 'e')enention -> exention (將 'n' 替換為 'x')exention -> exection (將 'n' 替換為 'c')exection -> execution (插入 'u')來源:力扣(LeetCode)連結:https://leetcode-cn.com
  • LeetCode-盛最多水的容器
    int j = i + 1; j < b.length; ++j) { int area = (j - i) * Math.min(b[i], b[j]); max = Math.max(max, area); } } return max;    }https://leetcode-cn.com
  • 「刷臉」被盜臉,技術不背鍋
    據現代快報報導,近日,上海浦東警方就破獲了這樣一起案件,一位陳先生在聚會後醉酒打車回家,不想,卻被計程車司機葉某通過「刷臉」,順利解鎖了陳先生的手機,又通過「刷臉」支付,轉走了陳先生微信帳戶裡的4500元錢款。目前,葉某因涉嫌盜竊,被浦東警方依法刑事拘留,案件在進一步審理中。
  • 淘寶刷流量是什麼意思,如何刷流量?
    淘寶刷流量其實就是當店鋪沒有流量時,通過特殊手段給店鋪寶貝注入流量,也就是訪客,並且能在流量統計後臺能統計的ip流量,通過給寶貝刷流量可以給商品帶來流量,同時有流量以後,就可以給店鋪寶貝補單,做銷量了,並且如果有些流量自帶收藏和購物車等操作,那麼會提高寶貝人氣的,對寶貝的轉化有一定促進作用。
  • 啥是Max-Q動態增強技術?實測看效果
    為了使Max-Q顯卡也能夠有更強力的性能表現,所以NVIDIA針對搭載了這類顯卡的遊戲本,研發了「Max-Q動態增強」技術。如果您手上購買了Max-Q顯卡的遊戲本,那麼通過開啟Max-Q動態增強技術,就會獲得額外一部分的性能提升。
  • 通過正念練習來緩解壓力的方法
    通過正念練習,可以減少我們感到的壓力情緒,提高自我效能,增強情緒調節能力,使得我們的生活充滿目標和意義;還能降低血壓、心率和呼吸頻率,使得肌肉張力釋放,來消除壓力情緒給我們帶來的短期影響。從長遠來看,放鬆可以緩解某些健康問題,包括高血壓、焦慮甚至癌症,此外還能改善整體健康和康復。
  • 想增強免疫力 來看看推薦的這些食物
    保持健康的最重要方法之一就是養成增強免疫力的習慣。 雖然人體的免疫力大多取決於遺傳基因,但是環境的影響也很大。這意味著你需要有充足的睡眠、保持樂觀的情緒、積極活動、正確洗手,當然還有吃得好。每天富有營養的均衡飲食有助於身體健康,並且很多食物已被證明有助於增強免疫力。下面隨著經濟日報-中國經濟網來了解下吧。
  • 最牛逼的方法:通過手機來檢測新冠病毒
    研究人員報告了一種免擴展的CRISPR-Cas13a檢測技術,該技術可直接從鼻拭子RNA中直接檢測SARS-CoV-2,從而通過手機顯微鏡進行進行轉換。該測定法在30分鐘的測量瞬間即可達到約100拷貝每微升的靈敏度,並能在5分鐘內準確地檢測出一對陽性臨床樣品中的預提取RNA。
  • NLP 數據增強方法回譯
    數據增強是擴充數據集的有效方法,本文介紹一種簡單可行的 NLP 數據集擴充方法——回譯,回譯在文本分類中有比較好的效果,也被成功地用在 Kaggle 惡意評論分類比賽中。1.NLP 數據增強方法 EDA介紹了一種 NLP 數據增強方法 EDA,本文介紹另一種簡單的數據增強方法
  • 萬字長文綜述:給你的數據加上槓桿——文本增強技術的研究進展及...
    非核心詞替換在上文的 EDA 技術中,對於要替換的詞是隨機選擇的,因此一種直觀感受是,如果一些重要詞被替換了,那麼增強後文本的質量會大打折扣。這一部分介紹的方法,則是為了儘量避免這一問題,所實現的詞替換技術,姑且稱之為「基於非核心詞替換的數據增強技術」。
  • 如何清洗化妝刷才能幹淨?清洗劑了解一下,最後一種方法很多人用
    哈嘍,姐妹們好呀,我是小伊,歡迎關注伊心美妝,每天學習多一點護膚穿搭,和我們一起變美一點點~化妝時,光有化妝品還不足以幫助完成一個漂亮的妝容,還需要用工具來進行輔助,一般越好用的工具,化妝速度會越快,想要約會時不讓男朋友等太久
  • 技術解讀:怎樣選擇潔面刷
    當皮膚表面的天然皮脂膜流失時,皮膚自我保溼力下降;pH值升高,微生物更容易生長;皮膚乾燥、起疹,容易感染。如果再進一步損傷,導致角質層變薄,以及角質層細胞間脂質流失,就很容易形成敏感皮膚,紅血絲、乾燥、癢、脫屑等,變得更為常見,因此我一直在強調:用正確的方法和產品,充分但適度清潔。
  • 如何增強自己的自信心?通過臨床和生活經驗的四個方法與你分享
    所以每一個人都有自卑的情節所在,這種自卑情結的東西總是讓我們不能昂首挺胸抬起頭來走路,甚至會為了自己的一點點自尊心和面子,讓自己陷入無盡的痛苦之中。在讀書的時候,很多學生碰到問題了,都不會主動去問老師,總感覺和老師之間有一些代溝,總感覺和老師之間存在著一種分歧,甚至碰到和老師交流溝通的時候,話都說不上來,心臟在撲通直跳,總想離開逃離老師的眼皮。
  • Leetcode上你刷到最難的是哪道題?
    本文轉載自【微信公眾號:小碼逆襲,ID:gh_7c5a039380a0】經微信公眾號授權轉載,如需轉載與原文作者聯繫大傢伙想要找份好工作,刷題是一道繞不過的坎,Leetcode大家都很熟悉了,很多公司面試的時候會用上面的原題,今天我們就來看看這
  • NeurIPS 2020|:新型自動數據增強方法解讀
    導讀:在NeurIPS 2020上,商湯研究院工具鏈的搜索和決策團隊提出了一項基於權重共享的新型自動數據增強方法。該工作以多項有啟發性的實驗現象為動機,第一次從權重共享角度思考自動數據增強,實現了既高效又有效的增強策略搜索算法。該方法在多個圖像分類數據集上取得了優秀的表現,尤其在CIFAR-10數據集上刷新了當時的SOTA性能。
  • 刷桶機大連廠家設備生產技術保障
    刷桶機大連廠家設備生產技術保障   刷桶機大連廠家設備生產技術保障    酶清洗:由乙酸纖維等材料製成的膜,由於耐高溫和極端pH,在膜通量難以恢復時,須採用能水解蛋白質的含酶清洗劑。
  • 搭載百度人臉算法,瑞識3D結構光模組通過國家級金融刷臉支付權威認證
    百度大腦人臉識別多模態活體檢測算法持續更新,再次助力合作夥伴通過金融支付「增強級」認證。近日,百度 AI 生態合作夥伴瑞識科技搭載百度大腦人臉識別多模態活體檢測算法的3D結構光模組,正式通過國家金融IC卡安全檢測中心-銀行卡檢測中心(以下簡稱BCTC)權威技術檢測,在業內率先獲得人臉識別技術活體檢測「增強級」認證。
  • 洗臉刷推薦
    今天給大家推薦兩款洗臉刷,都是我用過的我之前就買了clarisonic的pro洗臉刷,剛買的時候每天都會用,