如何高效刷算法題

安卓現(xiàn)在可卷了,現(xiàn)在招聘都是人均造火箭水平,雖然進(jìn)去還是擰螺絲。以前大部分公司不做算法也ok,現(xiàn)在稍微有點(diǎn)規(guī)模的公司,甚至初創(chuàng)公司都是算法考的飛起。

為啥?大概是疫情干倒了好多互聯(lián)網(wǎng)公司,甚至大廠也流出了很多大佬在市場上跟你搶飯碗,然后大佬在空降小廠坐鎮(zhèn)tl甚至總監(jiān),算法成必卷項(xiàng)了,怎么搞,刷刷唄。

BUT,刷算法的鐵汁,有沒有這樣的體驗(yàn)?上個(gè)月刷的題,上周刷的題,甚至昨天刷的題轉(zhuǎn)眼就忘了。

最近幾個(gè)月我也在刷算法題,已經(jīng)刷了快100題了。在工作的同時(shí)學(xué)習(xí)刷算法,個(gè)人感覺這個(gè)效率還可以。不過也走了一些彎路,所以把自己的心得分享一下,大致思路就是:

1.由簡向繁

首先如果是新手,刷算法肯定會(huì)遇到難題,會(huì)被各種阻塞,很容易搞心態(tài),從入門到放棄,但是本質(zhì)上也不是你不夠聰明,大概率是因?yàn)槟銢]有一個(gè)方法論,加上熟能生巧。
所以正確的初入刷題姿勢應(yīng)該是

打開leetcode.com網(wǎng)站 >> 打開題庫 >> 點(diǎn)擊通過率


通過率

通過率這么高,一般題目也容易做,這樣才不容易從入門到放棄 - -??!

2、分類刷題

其實(shí)刷題容易忘,除了有題目難,解法復(fù)雜的因素之外,還有一個(gè)因素是,沒有形成體系。
分類刷題就是為了解決這個(gè)問題的。首先從一類題入手這里推薦網(wǎng)站labuladong,里面除了對題目進(jìn)行典型分類梳理,還有很詳細(xì)的解題思路描述。
同樣的分類刷題依舊是采用由簡到繁的原則,舉個(gè)例子。
labuladong頁面一開始的鏈表題

鏈表題

如果你全部做完,你會(huì)發(fā)現(xiàn)其實(shí)困難題,大部分是由簡單題解法的混合操作,也就是簡單題的發(fā)散了,所以不要瞧不起簡單題,它是你成功的基石。
比如合并K個(gè)鏈表,一般效率最高的方式就是采用分治,分治的意思就是分而治之,把原來基數(shù)比較大的問題分割成小的問題,一直分割到最小兩個(gè)元素的處理,最后問題就轉(zhuǎn)換成了21題的合并兩個(gè)有序鏈表的方法。
ABCDEFGHM -> ABCD EFGHM
-> AB CD EF GH M 然后AB合并成了新的鏈表L CD為N 繼續(xù)合并L和N如此往復(fù),
最后困難題就被拆解成簡單題了。

public ListNode mergeTwoLists(ListNode list1, ListNode list2) {
        ListNode top = new ListNode();
        ListNode index = top;
        
        while(list1 != null && list2 != null){
            if(list1.val > list2.val) {
                index.next = list2;
                list2 = list2.next; 
            }else{
                index.next = list1;
                list1 = list1.next;
            }
            index = index.next;
        }

        index.next = list1 != null ?  list1 : list2;
        return top.next;
    }

再比如876找到鏈表的中間位置

public ListNode middleNode(ListNode head) {
        ListNode f = head;
        ListNode s = head;
        while(f.next != null && f.next.next != null){
            f = f.next.next;
            s = s.next;
        }
        return f.next != null ? s.next : s;
    }

那么我們就可以利用這個(gè)題目配合遞歸的深度逆向特性解決掉一些需要逆轉(zhuǎn)鏈表頭尾節(jié)點(diǎn)的題目。

在連續(xù)一段時(shí)間內(nèi)持續(xù)的對一種方法進(jìn)行正向刺激,達(dá)到強(qiáng)化記憶的效果。
然后在整體刷完一大類題之后,再重新回來看這里的題目,重新加深記憶。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容