怎样高效刷算法题

分享
源代码 2024-9-27 13:16:35 70 0 来自 中国
安卓如今可卷了,如今雇用都是人均造火箭水平,固然进去还是拧螺丝。从前大部门公司不做算法也ok,如今稍微有点规模的公司,以致初创公司都是算法考的飞起。
为啥?大概是疫情干倒了很多多少互联网公司,以致大厂也流出了许多大佬在市场上跟你抢饭碗,然后大佬在空降小厂坐镇tl以致总监,算法成必卷项了,怎么搞,刷刷呗。
BUT,刷算法的铁汁,有没有如许的体验?上个月刷的题,上周刷的题,以致昨天刷的题转眼就忘了。
近来几个月我也在刷算法题,已经刷了快100题了。在工作的同时学习刷算法,个人感觉这个服从还可以。不过也走了一些弯路,以是把自己的心得分享一下,大致思绪就是:
1.由简向繁

首先如果是新手,刷算法肯定会遇到困难,会被各种壅闭,很轻易搞心态,从入门到放弃,但是本质上也不是你不够聪明,大概率是由于你没有一个方法论,加上熟能生巧。
以是正确的初入刷题姿势应该是
打开leetcode.com网站 >> 打开题库 >> 点击通过率

通过率这么高,一样平常标题也轻易做,如许才不轻易从入门到放弃 - -!!
2、分类刷题

着实刷题轻易忘,除了有标题难,解法复杂的因素之外,尚有一个因素是,没有形成体系。
分类刷题就是为了办理这个标题的。首先从一类题入手这里保举网站labuladong,内里除了对标题举行典范分类梳理,尚有很详细的解题思绪形貌。
同样的分类刷题仍然是采取由简到繁的原则,举个例子。
labuladong页面一开始的链表题
如果你全部做完,你会发现着实困困难,大部门是由简朴题解法的肴杂操作,也就是简朴题的发散了,以是不要瞧不起简朴题,它是你乐成的基石。
比如合并K个链表,一样平常服从最高的方式就是采取分治,分治的意思就是分而治之,把原来基数比力大的标题分割成小的标题,不绝分割到最小两个元素的处理处罚,末了标题就转换成了21题的合并两个有序链表的方法。
ABCDEFGHM ->  ABCD   EFGHM
-> AB CD EF GH M  然后AB合并成了新的链表L  CD为N 继续合并L和N云云往复,
末了困困难就被拆解成简朴题了。
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;    }那么我们就可以利用这个标题配合递归的深度逆向特性办理掉一些须要逆转链表头尾节点的标题。
在连续一段时间内连续的对一种方法举行正向刺激,到达强化影象的结果。
然后在团体刷完一大类题之后,再重新返来看这里的标题,重新加深影象。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-11-24 21:20, Processed in 0.179237 second(s), 33 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表