0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

新手如何有效的刷算法题(LeetCode)

算法与数据结构 ? 来源:五分钟学算法 ? 2020-06-03 17:51 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前言

作为一名非科班出身的程序员,我是参加工作之后才开始接触算法,学算法至今有将近五年的时间,期间输出文字约 100 多万,从算法小白到写出百万阅读的算法文章,这一路历程,有心酸也有掌声。

过往历历在目,没有谁比我更了解算法小白的焦虑与迷茫。

每每在公众号后台看到读者留言求教时,我都在想:我能为他们做点什么。

我决定把我曾经踩过的坑以及总结出来的经验毫无保留的分享给你,希望能为你拨开迷雾。

这些经验并不会适合每个人,但或许也能对你有所启发。

今天这篇文章聊的话题就是新手如何有效的刷算法题(LeetCode)。

如果你想要开始刷题,那么第一步就是:打开 LeetCode 官网,点击标签,选择一道顺眼的题目开始刷。

注意,在这过程中,不要左思右盼,不要去搜索与思考到底是刷 LeetCode 好还是去牛客网刷剑指 Offer 好。

我作为一名算法小白的时候,就犯了这个错误:在粗略的了解基本的数据结构与算法后,准备开始刷题,总想着找一个最有效最好的刷题平台。

一会在 LeetCode 题解区逛逛,一会在牛客网看看面经,结果就是整个人烦躁不安,焦虑迷茫,题没有刷几道,羡慕嫉妒恨却增加了几分:别人的代码怎么这么简洁 ?别人的 Offer 怎么这么亮眼?

经过痛定思定之后,我开始自我剖析自己想好好刷题却无效的原因:

1、没有接受自己是算法小白的事实

我那时候只是按图索骥般的稍微系统的接触了基础数据结构与算法知识,根本没有真正的利用这些知识去处理问题。

在刷题的过程中,总想证明自己可以的,别人可以写成简洁高效的解题方法,我也要!于是去不停的找题证明自己,结果就是越刷越没有效果,自己根本就看不懂题目考察的数据结构与思想。

整个人完全奔溃,不刷题了,不准备算法面试了,不准备跳槽了!

后来我不停的告诫自己:作为一名非科班的程序员,肯定比不上他们呀,如果随随便便的学了一点就能刷题顺利,那别人大学四年不白学了!

所以前期先接受自己的思考方式,暴力解法其实也是一种有效的解法。

2、没有合理的刷题

我只是盲目的追求刷题的数量,即使刷了 200 道,脑中依旧一团浆糊。

后来才明白,吃透一道题目比乱刷十道题目更有价值。

经过不断的摸索与试验,形成了自己的一套刷题路径。

自己的解法

网上好的解法

自己的解法可以优化的地方

不停的优化

寻找相同的题型

总结

每一个题目都经过至少一遍这样的迭代,彻底吃透一道题进而掌握一种题型。

以一道极其简单的动态规划题为例 ,LeetCode 第 70 号问题:爬楼梯。

当时的我根本不知道动态规划的相关概念,什么状态,什么转移方程,通通没听过。

没错,当时就那么菜!

二话不说,直接使用暴力解法。

classSolution{ publicintclimbStairs(intn){ returncalcWays(n); } privateintcalcWays(intn){ if(n==1)return1; if(n==2)return2; returncalcWays(n-1)+calcWays(n-2); } }

很明显,无脑的递归暴力解法包含了大量的重复计算,提交上去直接标红提示超出时间限制。

后来看了网上高票答案的分析,知道了备忘录的概念,于是很容易写出优化后的代码。

//采用备忘录的方式来存子问题的解以避免大量的重复计算 classSolution{ int[]memo; publicintclimbStairs(intn){ memo=newint[n+1]; returncalcWays(n); } privateintcalcWays(intn){ if(n==1)return1; if(n==2)return2; if(memo[n]==0) memo[n]=calcWays(n-1)+calcWays(n-2); returnmemo[n]; } }

再后来,发现备忘录是自顶 向下的方式,稍许变动,修改为自低 向上的递推方式就是动态规划的形式。

classSolution{ publicintclimbStairs(intn){ int[]memo=newint[n+1]; memo[0]=1; memo[1]=1; for(inti=2;i<=?n;?i++){? ????????????memo[i]?=?memo[i-1]?+?memo[i-2];? ????????}? ????????return?memo[n];? ????}? }

按照这样的刷题路径下来,发现对这类题型有了初步的思考途径,有了发力点,再也不会一筹莫展:看题懵逼半小时,Coding 只会按空格。

彻底搞懂这题后,就需要找到类似的题型,然后不断的重复练习:最小路径和、整数拆分、完全平方数、解码方法、不同路径、不同路径 II。

通过这些练习,寻找题目中的共同点,为什么这类题型都可以这样思考呢?

慢慢的,知道了最优子结构、状态转移方程、重叠子问题的概念,不知不觉动态规划的知识点已经掌握了 80%。

再遇到更高难度的动态规划的题目时,心里也明白,一时半会没做成无法就是最优子结构、状态转移方程、重叠子问题没有理清楚。

这样长期坚持下来,接触新的题型时也可以从容不迫的思考。

后记

如果说成为大神有什么诀窍的话,那就是相信时间的力量,每天进步一点就够了!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 算法
    +关注

    关注

    23

    文章

    4720

    浏览量

    95944
  • leetcode
    +关注

    关注

    0

    文章

    20

    浏览量

    2463

原文标题:新手如何有效的刷算法题(LeetCode)

文章出处:【微信号:TheAlgorithm,微信公众号:算法与数据结构】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    PID控制算法学习笔记资料

    用于新手学习PID控制算法
    发表于 08-12 16:22 ?2次下载

    【赛知多少】 紫光同创赛答疑专场|2025年全国大学生嵌入式芯片与系统设计竞赛FPGA赛道

    紫光同创赛道答疑专场来啦!2025年全国大学生嵌入式芯片与系统设计竞赛报名已拉开帷幕,FPGA赛道的挑战与创新并存。近期,我们收到许多关于赛的咨询,小眼睛科技团队第一时间整理了大家的疑问,并带来
    的头像 发表于 08-06 11:02 ?831次阅读
    【赛<b class='flag-5'>题</b>知多少】 紫光同创赛<b class='flag-5'>题</b>答疑专场|2025年全国大学生嵌入式芯片与系统设计竞赛FPGA赛道

    无位置传感器无直流电机最大转矩控制

    摘要:超前或滞后换相会造成无直流电机(BLDCM)输出转矩的减小和系统效率的降低。以平均电磁转矩最大化为目标,提出了一种基于扩展卡尔曼滤波算法的无直流电机最佳换相时刻估算方法。该方法建立了平均
    发表于 07-10 16:41

    直流电机逆变器故障诊断仿真研究

    的薄弱环节,其可靠性问题一直没有得到充分解决。而最新研究也表明:变频调速系统中功率变换器故障占整个驱动系统故障的82.5%。因此,有效防止逆变器故障是提高无直流电机变频调速系统运行安全性、可靠性的根本
    发表于 07-07 18:31

    直流电机模糊自适应PID控制的研究

    摘要:为了提高无直流电机控制系统的动、静态性能,将模糊控制结合PID控制算法应用到无直流电机速度控制系统中。在分析了无直流电机速度控制系统的基础上,利用PSIM与MATLAB/S
    发表于 07-07 18:29

    直流电机模糊PI控制系统建模与仿真

    。利用该模型进行了电机动静态性能的仿真研究,仿真结果与理论分析一致,表明读方法建立的 BLDCM控制系统仿真模型合理、有效。该模型简单、直观、参数易于修改和替换,可方便地用于其他控制算法仿真研究。 纯
    发表于 07-07 18:25

    直流电机滤波器设计方法研究

    直流电机(BLDCM)以其输出转矩大,控制简单的优点而被广泛的应用“-。但是,位置传感器的存在限制了 BLDCM的应用。因而,越来越多的研究考虑利用电机的端电压和电流通过计算间接得到转子的位置
    发表于 07-07 18:22

    直流电机抗饱和变结构PI控制研究

    的积分 windup现象进行了分析,并将抗饱和变结构 P 控制算法应用到 BLDCM 电流滞环控制系统的转速调节器中。为验证采用控制方法的有效性,在 MATLAB/Simu.link 仿真平台下搭建
    发表于 06-27 16:51

    直流电机改进型直接转矩控制研究

    的无直流电机控制,定子链可近似认为保持不变。然而,对磁链幅值的控制将会改变电机绕组的固定导通方式,仅通过控制定子磁链旋转速度就可以实现电机的有效控制。在此基础上提出了一种新颖的无直流电机直接转矩
    发表于 06-27 16:45

    直流电机电流测量的探究

    摘要 :近几年,无直流电机在工业控制领域的应用越来越广泛,而有效的电流测量是控制方法实现的前提,也是提高控制性能的基础。本文基于 TIS320LF2407ADSP 控制器,对无直流电机
    发表于 06-26 13:45

    双馈异步电机潮流建模和收敛性研究

    的 BDFM初值算法,给出IEEERTS系统中 BDFM参数计算结果,以验证所提 BDFM潮流算法的可行性和正确性。 纯分享帖,点击下方附件免费获取完整资料~~~ *附件:无双馈异步电机潮流建模和收敛性
    发表于 06-25 13:12

    改进的BP网络PID控制器在无直流电机中的应用

    通过分析学习速率对BP算法的影响,提出一种分层调整学习速率的改进BP 网络算法,并把该方法设计成 PID控制器应用在无直流电机控制系统中,仿真结果验证了基于改进的 BP 网络的PID控制器
    发表于 05-28 15:42

    低噪革命!FOC 算法赋能无破壁机方案新飞跃

    电机驱动技术的引入,更是让破壁机在性能、效率以及用户体验上实现了质的飞跃。本文将从电机特性、功率表现、噪音控制等方面,深入剖析220V无刷电机驱动破壁机的驱动方案,重点突出低速大扭矩特性以及?FOC?控制算法的应用优势。
    的头像 发表于 04-14 17:04 ?482次阅读
    低噪革命!FOC <b class='flag-5'>算法</b>赋能无<b class='flag-5'>刷</b>破壁机方案新飞跃

    探索 MS37549 直流无马达驱动方案的奥秘

    方案的神奇之处。 一、MS37549 直流无马达驱动方案的简介 MS37549 直流无马达驱动方案是一种高效、可靠且性能卓越的技术解决方案。它采用了先进的控制算法和电路设计,能够实现对直流无
    的头像 发表于 10-18 17:55 ?688次阅读

    发电机是无好还是有

    发电机选择无还是有,主要取决于具体的应用场景和需求。以下是对两种发电机类型的比较: 一、有发电机的特点 价格与成本 :有发电机通常价格较为实惠,后期维护和修理相对简单,成本也较
    的头像 发表于 09-03 10:51 ?4131次阅读