Anki實戰-刷leetcode之「141-環形鍊表」

2021-02-21 Anki學霸
有同學說自己刷leetcode的時候每次刷完就忘,忘了再刷。如果不刻意記憶,即使掌握了解題思路,想在短時間內(面試期間)想出解決方案也不是一件容易的事。相反,如果我們能記住每一道題的解法,那麼不僅可以在面試的時候遊刃有餘,而且平時沒事的時候讓這些算法在腦海中浮現、思考也是一件趣事。這篇文章主要描述如何使用Anki刷leetcode,做到刷一題記一題,而不是每次都要被迫臨陣磨槍。軟體工程師會比較喜歡看到這篇文章,其他同學也可以參考下如何使用Anki學習其他領域的類似知識。分析解決問題。今天要刷的題是「141-環形鍊表」,首先看下這道題的條件和問題:

這道題關於條件的描述比較模糊,會讓人誤以為pos是給定的值,但其實pos只是用來說明環形鍊表的概念,真正的條件就只是給定的一個鍊表。經過簡單分析可以得到下面兩種思路:

使用第二種思路能獲得更小的空間複雜度,對之進行編碼實現、調試優化,確保提交通過並且獲得不錯的時間和空間複雜度。

製作Anki卡片。將算法截圖,打開Image Occlusion Enhanced插件的窗口:

剛開始做這種算法題的卡片時,我認為針對每一行做遮蓋效率低且沒必要,因為覺得自己可以輕鬆回憶出一塊代碼。前幾次複習的時候的確可行,但當一張卡片的複習間隔逐漸拉長,我發現後面想要回憶出整塊代碼比較困難,每次都要從頭過一遍整體思路才能慢慢回憶出整塊代碼,而又因為代碼是被整塊記憶的所以整體思路並不容易梳理。整塊代碼記憶,拖慢了複習卡片的速度。後來乾脆將之前做過的卡片逐個重構,結果是每行代碼每行注釋(注意區分注釋和代碼,否則容易弄混)都獨立成一張卡片。我發現這樣做不僅能讓記憶和回憶一行代碼更輕鬆,整個算法思路也更容易在腦海中勾勒出來。按照這種思路,針對這道算法題做出的卡片如下:

在Browser中查看生成的卡片:

任意選一張瀏覽:

學習和複習卡片。使用上面的方法製作完卡片之後,第一次學習卡片的時候你可能想要儘可能地回憶出來被遮住的代碼。不必這麼做,因為卡片對你來說是新的,你需要做的是學習、理解,嘗試把一行代碼(或者一個知識點)放到全局去思考它的意義。一開始不能完全把握一張卡片中包含的代碼的含義也沒問題,一張張學下去,逐漸地算法的整體思路就會自動浮現出來(奇妙的大腦)。整個過程和玩拼圖非常相似。複習的時候,針對每張卡片,可以從頭梳理整個算法思路,直到被遮蓋的這行代碼。因為我們是針對每行代碼進行記憶,所以梳理整個算法思路是件簡單的事。

按照文中的方法,逐題處理,每天堅持複習完所有卡片,相信用不了多久,算法相關的面試題就不再是絆腳石。

相關焦點

  • 春節大禮包|刷題技巧+80道Leetcode
    為了跳槽,我前兩年的春節都是在刷題中度過的,目前為止刷了小四百道leetcode,也算是有一些經驗,今天就跟大家分享下學習方法和我總結的乾貨。其實就一句話:有體系,重實戰。有一個大概的知識體系後,以深度優先遍歷的方法循序漸進的實戰,讓自己把每個知識點徹底挖透記牢。Leetbook 是 Leetcode官方提供的課程,它的好處是把算法歸類為各個章節,而且大部分章節都是免費的。
  • LeetCode 例題精講 | 05 雙指針*鍊表問題:快慢指針
    轉自面向大象編程本期例題:LeetCode 876 - Middle of the Linked List[1](Easy)尋找鍊表中點LeetCode 19 - Remove Nth Node From End of List[2](Medium)尋找鍊表的倒數第 k 個元素LeetCode 141
  • Leetcode刷題-鍊表
    鍊表中倒數第k個節點難度:簡單輸入一個鍊表,輸出該鍊表中倒數第k個節點。為了符合大多數人的習慣,本題從1開始計數,即鍊表的尾節點是倒數第1個節點。例如,一個鍊表有6個節點,從頭節點開始,它們的值依次是1、2、3、4、5、6。這個鍊表的倒數第3個節點是值為4的節點。
  • ​LeetCode刷題實戰148:排序鍊表
    今天和大家聊的問題叫做 排序鍊表,我們先來看題面:https://leetcode-cn.com/problems/sort-list/Given the head of a linked list, return the list after sorting it in ascending order.
  • 頂級程式設計師必刷寶典!LeetCode中文解題思路重磅問世!
    LeetCode簡介LeetCode收錄了許多網際網路公司的算法題目,被稱為刷題神器。資源內容第一個部分是 leetcode 經典題目的解析,包括思路,關鍵點和具體的代碼實現。第二部分是對於數據結構與算法的總結第三部分是 anki 卡片, 將 leetcode 題目按照一定的方式記錄在 anki 中,方便大家記憶。
  • ​LeetCode刷題實戰138:複製帶隨機指針的鍊表
    今天和大家聊的問題叫做 複製帶隨機指針的鍊表,我們先來看題面:https://leetcode-cn.com/problems/copy-list-with-random-pointer/A linked list is given such that each node contains an additional random pointer which
  • ​LeetCode刷題實戰25:K 個一組翻轉鍊表
    今天和大家聊的問題叫做K 個一組翻轉鍊表,我們先來看題面:https://leetcode-cn.com/problems/reverse-nodes-in-k-groupGiven a linked list, reverse the nodes of a linked list k at a time and return its
  • 字節大佬Leetcode刷題筆記,看完吊打問你算法的面試官
    介紹leetcode 題解,記錄自己的 leetcode 解題之路。目前分為五個部分:第一個部分是 leetcode 經典題目的解析,包括思路,關鍵點和具體的代碼實現。第二部分是對於數據結構與算法的總結第三部分是 anki 卡片, 將 leetcode 題目按照一定的方式記錄在 anki 中,方便大家記憶。
  • ​LeetCode刷題實戰23:合併K個升序鍊表
    今天和大家聊的問題叫做合併K個升序鍊表,我們先來看題面:https://leetcode-cn.com/problems/merge-k-sorted-lists/Given an array of linked-lists lists, each linked list is sorted in ascending order.Merge
  • 一次搞定面試中的鍊表問題
    之前寫過一篇關於鍊表的文章,今天補上一些leetcode上鍊表相關的題目,繼續匯總鍊表相關的問題,也希望可以為找工作的同學們提供一點幫助。(之前寫過一篇鍊表的, 面試常考的排序算法,這裡進一步擴展了一些更有難度的問題)下面的鍊表題包括(對應leetcode上有的,我把連結附在後面):單鍊表轉置兩兩交換鍊表中的節點每k個節點一組翻轉鍊表判斷鍊表是否有環求鍊表上倒數第K個節點找到環形鍊表的起始節點求環的長度
  • 每天一道leetcode61-旋轉鍊表
    正當班主任要繼續發話,只聽到角落默默想起來一個聲音:」K2」前言 2018.11.21號打卡今天的題目leetcode26:https://leetcode-cn.com/problems/remove-duplicates-from-sorted-array/description/昨天的題解題目 每天一道leetcode61
  • 合併兩個有序鍊表 | Leetcode題解
    題目描述將兩個升序鍊表合併為一個新的升序鍊表並返回。新鍊表是通過拼接給定的兩個鍊表的所有節點組成的。 /problems/merge-two-sorted-lists/solution/he-bing-liang-ge-you-xu-lian-biao-by-leetcode-solu/複雜度分析M、N 是兩條鍊表 l1、l2 的長度
  • 帶你狂刷算法Leetcode題!短時間內快速獲得實戰能力!
    但對於初學者來說,很容易沉迷在刷題的數量中,覺得如果能刷完這1000道題,自己一定能夠有所飛躍。但實際上,低效率的重複對你來說,根本就無法掌握到解題的精髓,一旦題目有所變動,就無法舉一反三。那究竟應該怎麼刷題才高效呢?
  • LeetCode-21.Merge Two Sorted Lists | 合併兩個有序鍊表
    題解這道題是經典的考察鍊表的題目。解法一:遞歸•終止條件:兩條鍊表分別名為 l1 和 l2,當 l1 為空或 l2 為空時結束•返回值:每一層調用都返回排序好的鍊表頭•本級遞歸內容:如果 l1 的 val 值更小,則將 l1.next 與排序好的鍊表頭相接,l2 同理•O(m+n)O(m+n),mm 為 l1的長度,nn 為 l2 的長度//Go/** * Definition
  • 如何科學的刷 Leetcode
    在 2019 年的秋招之前,我曾經系統的刷過一段 Leetcode 算法題。平均每天做一道,堅持了有三四個月時間,從三月份到七月份。我的方法觀裡,有三個重要的點,分別是:•找到科學的刷題順序•學習優秀的解題方案•及時整理題目的套路找到科學的刷題順序目前 Leetcode 收錄的算題題目,超過了一千道,數量非常之多。同學們也都是很有想法的人,於是,八仙過海,各有各的姿勢。
  • leetcode刷對了麼
    今天,逆行君就帶你從世界觀和方法論兩方面走進「leetcode」 leetcode之世界觀 什麼是leetcode 簡單來說,leetcode是一個美國的在線編程網站,它收集了各大公司的經典算法面試題,用戶可以選擇不同的語言進行代碼的在線編寫、編譯和調試。
  • LeetCode 328. 奇偶鍊表 | Python
    奇偶鍊表題目來源:力扣(LeetCode)https://leetcode-cn.com/problems/odd-even-linked-list/ 題目 給定一個單鍊表,把所有的奇數節點和偶數節點分別排在一起。
  • 面試官系列 - LeetCode鍊表知識點&題型總結
    分類刷題,我們在力扣上面可以看到,https://leet-cn.com/problemset/algorithms/ ,刷題是可以按標籤來的。比如鍊表,數組,二分查找,二叉樹,動態規劃等學好算法不是一日之功,需要長期的積累。建議的做法是每天做一兩道題,題目不在多,貴在於理解。
  • leetcode刷題最強指南(版本1.0)
    為什麼會有這篇刷題指南很多剛開始刷題的同學都有一個困惑:面對leetcode上近兩千道題目,從何刷起
  • 龜兔賽跑解環形鍊表問題
    力扣第142題:給定一個鍊表,返回鍊表開始入環的第一個節點。如果鍊表無環,則返回 null。