<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          來和大家聊聊我是如何刷題的(第一彈)

          共 938字,需瀏覽 2分鐘

           ·

          2020-12-03 11:24

          點(diǎn)擊藍(lán)色“力扣加加”關(guān)注我喲

          加個(gè)“星標(biāo)”,帶你揭開算法的神秘面紗!


          ?

          這是力扣加加第「29」篇原創(chuàng)文章

          今天給大家聊聊怎么刷題, 預(yù)計(jì)分幾篇文章來寫,今天是第一篇。

          話不多說,直接上干貨。

          我建議大家 BFS

          我的做法是集中時(shí)間只刷某一類的題目。這樣對(duì)某一類題目就很有心得,做題就有題感,不會(huì)「做一道是一道,下次碰到類似的題,甚至原題都不會(huì)」。其實(shí)很多算法都是息息相關(guān)的,等你攻克了足夠多的專題之后,算法知識(shí)才能融會(huì)貫通。

          我建議大家刷題的時(shí)候是「廣度優(yōu)先,逐個(gè)突破」?碰到不會(huì)的適當(dāng)放棄,而不是深度優(yōu)先,”死磕某一個(gè)知識(shí)“。比如大家在刷樹的專題, 碰到一個(gè)樹型 DP 不會(huì), 這個(gè)時(shí)候應(yīng)該果斷放棄,等大家刷到 DP 的時(shí)候再回過頭「撿起來」。

          聽起來簡單,但是我從哪個(gè)專題開始, 題目那么多我該刷哪個(gè)呢?

          下面是我的?91 天刷題活動(dòng)[1]的目錄:

          可以看出,我們的章節(jié)安排就是一個(gè)專題一個(gè)專題, 從簡單到困難。大家也可以參考這個(gè)模式。如果你實(shí)在不知道。

          刷題路線可以從網(wǎng)上找,你如果懶得找,而且也不嫌棄在下的話,可以參考我的?leetcode 題解倉庫[2],把里面的題目刷下,或者參加我的 91 天學(xué)算法。

          BFS 就是在必要的時(shí)候不求甚解。比如,我在?穿上衣服我就不認(rèn)識(shí)你了?來聊聊最長上升子序列[3]?中提取了很多 LIS(最長上升子序列)題目。很多人評(píng)論說”這效率不行,不如貪心??!“。

          這點(diǎn)我承認(rèn)。但是我這里的主要目的是給大家橫向?qū)Ρ阮}目,做到「多題同解」。

          大家想看效率高的,其實(shí)也不難。LIS 也可以用?「貪心 + 二分」?達(dá)到不錯(cuò)的效率。代碼如下:

          代碼文字版如下:

          class?Solution:
          ????def?lengthOfLIS(self,?A:?List[int])?->?int:
          ????????d?=?[]
          ????????for?a?in?A:
          ????????????i?=?bisect.bisect_left(d,?a)
          ????????????if?i?????????????????d[i]?=?a
          ????????????elif?not?d?or?d[-1]?????????????????d.append(a)
          ????????return?len(d)

          所以我的意思是,大家在適當(dāng)?shù)臅r(shí)候要不求甚解,不去追求這些東西。等大家把一個(gè)套路學(xué)的差不多,咱再學(xué)下一個(gè)。所謂「君子報(bào)仇,十年不晚」?^_^

          另外插一句題外話, LIS 真的很有用,大家一定要掌握,掌握了平方的解法再去看看??的解法,一些 HARD 題目必須要??才能過。

          比如這道題:

          題目后的提示如下:

          3?<=?nums.length?<=?1000
          1?<=?nums[i]?<=?109
          題目保證 nums 刪除一些元素后一定能得到山形數(shù)組。

          看到這些,大概估算我們的時(shí)間復(fù)雜度?,基本過是沒問題的,果然就過了。

          再次印證了,刷題的多少是次要的,吃透一類題才是王道,這其實(shí)就和我的「BFS 刷題大法」相呼應(yīng)。

          套路很重要

          以上的這些,其實(shí)都是幫助大家識(shí)別套路,提高刷題效率的。知道了廣度優(yōu)先,也知道了刷什么題也是不夠的。比如:

          • 這些專題有哪些考點(diǎn)?如何應(yīng)對(duì)?
          • 有模板么?
          • 我如何想到用這種解法?
          • 等等

          針對(duì)這些問題,我寫了很多文章給大家。比如前面一段時(shí)間,我給大家寫了兩篇專題:

          • 幾乎刷完了力扣所有的樹題,我發(fā)現(xiàn)了這些東西[4]
          • 幾乎刷完了力扣所有的鏈表題,我發(fā)現(xiàn)了這些東西[5]

          大家的反響大部分都是不錯(cuò)的。

          在之前, 我還寫了幾篇解套篇,就是將力扣相同解法的題目匯總起來,幫助大家解套,比如:

          • 穿上衣服我就不認(rèn)識(shí)你了?來聊聊最長上升子序列[6]
          • 你的衣服我扒了 - 《最長公共子序列》[7]

          甚至還寫了母題系列(不過大家不太喜歡,就沒繼續(xù)更新了):

          • 《我是你的媽媽呀》 - 第一期[8]

          你認(rèn)真看完我寫的,基本上覆蓋了專題下的大部分考點(diǎn)。

          你接下來想看啥?歡迎去我的刷題群告訴我(關(guān)注公眾號(hào)《力扣加加》回復(fù) leetcode 根據(jù)提示操作即可)。

          掌握多個(gè)編程語言

          刷題以及打比賽都講究速度,天下武功唯快不破。

          這個(gè)快,一方面是「運(yùn)行速度快」,另一方面是「編碼速度快」。你可以看出很多人刷題,打比賽都會(huì)不斷切換語言的。我們要承認(rèn)不同語言效率是不一樣的,這個(gè)效率可能是執(zhí)行,也可能是編碼。具體使用哪種語言,看你的需求。

          論編碼速度,那肯定動(dòng)態(tài)語言快,論執(zhí)行速度那肯定靜態(tài)語言快。所以我的建議是大家至少掌握「一靜一動(dòng)」,即掌握一個(gè)動(dòng)態(tài)語言,一個(gè)靜態(tài)語言。

          「我個(gè)人動(dòng)態(tài)語言用的 Python 和 JS,靜態(tài)語言用的 Java 和 CPP,大家可以作為參考?!?/strong>

          一個(gè)小建議是你選擇的語言要是題解比較熱門的。那什么語言是熱門的?其實(shí)很容易。力扣題解區(qū),語言排名高的基本就是了,如下圖:

          掌握語言不僅能幫助你在效率中運(yùn)用自如,并且還容易看懂別人的題解。除此之外還有一個(gè)用,那就是「回頭復(fù)習(xí)的時(shí)候用」。拿我來說, 我會(huì)不固定回去刷以前做過的題,但是一道題做過了就沒新鮮感了,這個(gè)時(shí)候我就換個(gè)語言繼續(xù)刷,又是一番滋味。

          使用模擬面試

          這個(gè)技巧,我之前提到過。力扣也有模擬面試的功能,大家也可以線下真人白板面試。不管如何,建議大家一定要有「時(shí)間觀念和一次 AC 的標(biāo)準(zhǔn)」。

          使用模板

          很多題目都是模板題。你如我在?二分法專題[9]?就給大家總結(jié)了無數(shù)的模板,其實(shí)還有很多專題都有,大家去我的歷史文章翻翻就有。

          但是大家「一定理解之后再去用模板」。不要沒理解直接套,這是不好的。

          更多技巧,期待下次。

          預(yù)告

          最后最后給大家一個(gè)小道消息,和上面的解題模板有關(guān)。

          接下來,力扣加加的刷題插件計(jì)劃推出「刷題模板功能」

          • 給大家提供多種刷題模板,可以直接復(fù)制使用。
          • 各個(gè)模板都有都有的題目,大家可以直達(dá)題目進(jìn)行”默寫“。
          • 更多功能,等你來提~

          Reference

          [1]?

          91 天刷題活動(dòng):?https://lucifer.ren/blog/2020/10/19/91-algo-2/

          [2]?

          leetcode 題解倉庫:?https://github.com/azl397985856/leetcode

          [3]?

          穿上衣服我就不認(rèn)識(shí)你了?來聊聊最長上升子序列:?https://lucifer.ren/blog/2020/06/20/LIS/

          [4]?

          幾乎刷完了力扣所有的樹題,我發(fā)現(xiàn)了這些東西:?https://lucifer.ren/blog/2020/11/23/tree/

          [5]?

          幾乎刷完了力扣所有的鏈表題,我發(fā)現(xiàn)了這些東西:?https://lucifer.ren/blog/2020/11/08/linked-list/

          [6]?

          穿上衣服我就不認(rèn)識(shí)你了?來聊聊最長上升子序列:?https://lucifer.ren/blog/2020/06/20/LIS/

          [7]?

          你的衣服我扒了 - 《最長公共子序列》:?https://lucifer.ren/blog/2020/07/01/LCS/

          [8]?

          《我是你的媽媽呀》 - 第一期:?https://lucifer.ren/blog/2020/08/03/mother-01/

          [9]?

          二分法專題:?https://github.com/azl397985856/leetcode/blob/master/91/binary-search.md

          瀏覽 63
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美毛片在线看 | 国产一区二区三区四 | 在线观看黄色电影 | 日本欧洲黄色免费看 | 日韩AV中文 |