首页 > 其他分享 >刷题建议

刷题建议

时间:2023-12-01 09:44:20浏览次数:33  
标签:力扣 建议 自己 问题 算法 思路 刷题

刷题这件事情本身也是需要「方法」的。

我们针对算法面试准备的算法题,不是智力题,我们觉得刷题有困难,有很大一部分是心理上的因素。其实这一类算法问题非常像我们初高中的数学问题,知识点很多,都有相对固定的思考方向和常考的知识点,答案和思路也是相对固定的。

刷题这件事情我觉得一开始以培养兴趣为主,从易到难做,同类问题一起做(按标签)做,是我看到的绝大多数朋友刷题的方式。

「力扣」的「探索」模块就是适合入门的地方。你可以从「数组」「二分查找」「字符串」「链表」这些模块开始做起,这些模块需要的基础知识较少,并且「探索」板块本身就是一个小的教程。通过知识讲解和练习是可以掌握这一类问题的通用的做法的。

刷题建议
做题的时候需要先仔细读题,把题目中的文字描述细节和示例看一下,然后再看看输入数据的范围,确保自己明确了题意以后想思路,然后再编码。

编码遇到问题,测试通不过是非常正常的事情。这个时候首先思考是不是本身思路上就存在问题,可以根据不能通过的测试用例,检查自己的思路在哪一方面没有考虑周到。如果是思路正确,那就是在编码实现的时候遇到的问题,这其实是比较考验耐心的。调试程序本身就是一种需要训练的能力,一个简单而有效的方法就是在程序的关键的地方,做一些 System.out.println(i); 之类的打印输出,观察数据是否按照我们所设定的流程执行下去。这件事情看起来枯燥,但是是作为程序员的基本技能,只能靠自己训练获得。

如果一道问题自己没有思路,完全可以直接看别人的思路。如果别人的思路看不懂,没有关系,看不懂就跳过。看不懂在一些情况下不是问题,不同的朋友表达的方式和语言不一样。写题解和博客的朋友不可能都从头开始写,每个人写题解的侧重点也不同,会假设读者有的算法和数据结构的知识也会不同。

看完别人的思路,觉得合理可行,再自己尝试编码。遇到问题再去比对别人给的示例代码。

即使是自己独立做完的问题,也很有必要在做完以后看看别人的思路,这一步也会让自己学习到很多。

用好收藏夹
实在不懂又很想搞清楚的问题,不妨就放在收藏夹里,「力扣」本来就有提供收藏夹功能。也可以给自己刷题的 GitHub 仓库提交一个 issue ,把这道题和自己找到相关的参考资料写进去,提醒自己以后花时间去搞清楚。今天怎么想都不明白,过两天一下子就想通的事情也是常有的。因为有些时候学习和思考问题,个人的情绪和状态也是有关系的。

还有一些比较难的问题,一开始先别去碰,可以先看看题目的意思,不感兴趣就不做,感兴趣的话,不强求自己一定要做出来,就放在那里慢慢花时间搞懂,也是常有的事情,一道题可能重启 4 遍到 5 遍才搞懂是非常正常的,而且这样的问题如果最后自己真的搞定了以后是很有满足感的,力扣的第 4 题、第 5 题、第 47 题、第 41 题、第 300 题,第 42 题、第 84 题差不多就是类似的问题,即使是刷了很多遍以后,我都不敢说我完全搞懂了这些问题,就让它们在收藏夹里先吃灰叭。

尝试表达输出,尽量用简单、通俗的语言描述自己的思路
在刷题的过程中,需要自己总结这一类问题的特点,然后用自己的语言表达,写博客、题解或者是和一起刷题的小伙伴讨论。这些虽然不是写代码,但也属于刷题的一部分,可以积累下来形成刷题的「数据」,以后不论是找工作还是自己复习都是十分有帮助的,我和很多小伙伴都是这么做的。

养成好的编码习惯
刷题不是只有“数量”这个指标,即使是同样的思路,不同的人写出来的代码也会有很大差异。怎么写代码也是需要自己总结和训练的。代码格式良好,有恰当的、必要的注释,让别人能够很清楚地了解自己的思路,也是需要慢慢锻炼的。虽然刷题是个人行为,但是在写代码的时候按照写工程代码的标准来要求自己,我个人觉得是非常有益处的,我自己也是坚持这么做的,可以让自己避免很多坑和不必要的麻烦。

不只是为了面试而刷题
刷题这件事情对于绝大多数朋友,也包括我,目标主要是在面试中得到一个好的成绩,找到一份好的工作。但刷题的过程是很值得经历的,从焦虑到欣喜,再到焦虑和自我怀疑,然后又莫名其妙自我感动,都是很正常的。

把「力扣」的算法题就想象成解决一个一个日常生活中遇到的问题,我们写的「算法」就是解决这些问题的方法,而「数据结构」是存储和处理数据的容器,是我们可以利用的工具,很多是现成的编程语言的函数库就提供给我们使用的。

不要把刷题想得很难,很多时候只是心态的问题
刷题比起很多工作,例如机器学习里的公式推导、打一些数据挖掘竞赛、很多研究生朋友写科研论文,是要简单得多,甚至比起大家考研的时候学习的高等数学、线性代数、概率论与数理统计都要简单很多,要相信自己一定可以慢慢拿下的。

不要有太大压力,一道题做得出来做不出来,都不能说明太大问题,做对了有可能是侥幸,做错了也有可能是一时头脑短路或者是题目不对味口。

我有一位非常好的朋友,他是科班出身,听他说他以前刷题的时候,没有思路得去找学长讨论,LeetCode 当时还没有中文社区,看思路和题解、和别人交流得用英文。现在其实我们方便很多了。

刷基础算法问题和智商绝大多数情况下没有关系(刷 ACM 等竞赛题库除外),我个人觉得是和「态度」有关。可以想一想自己是不是认真地在刷题,参考资料和视频讲解手上都有,还搞不清楚,是不是自己花的时间不够,或者说没有找认真找合适的资料,或者就是自己想偷懒。

适合自己的刷题方式也是需要慢慢摸索的,一开始需要一些帮助和基础知识储备是必要的。后期就是查缺补漏,重点训练了。一开始不要过于执着一个问题,一个问题没有搞清楚,就放一放,问题很多,不可能全部做完,也不可能全部搞懂。自己需要合理分配时间和精力。

即使是「回溯算法」「动态规划」「贪心算法」「哈希表」「红黑树」这样高级的数据结构和算法,它们确实很复杂、很难,但是它们的基本思想是很简单的,或者说它们就是从一个很简单的样子一点一点变化,变成我们现在看到的这个样子,绝大多数算法思想都可以在我们的生活中找到对应的例子去理解它。

「力扣」的周赛其实也是很适合新手的,我现在想做的时候,也都会去做一下周赛,然后会和固定的小伙伴交流做题心得,有的时候也就是简单汇报一下自己做出了哪题,哪题实在想不出来,或者吐槽一下一些问题题目太长或者题意难懂实在不想做。有些朋友会误解我可能做那些问题会很轻松,其实不是的,我现在做周赛也就 2 题到 3 题,从来没有 4 题都做完过。头几次周赛一道题都没做出来就是我了。可以把每次周赛就当做是一次模拟的笔试、有很多小伙伴陪我们一起做,找找感觉,我想说的是,而且一定会有真·大佬出来,在「力扣」的「圈子」板块和题解区、评论区分享它们的做题思路和代码,在一些视频网站也可以看到他们的比赛实况和赛后讲解,讲得都非常不错,我们可以趁机向他们学习。

个人观点,仅供参考。

作者:liweiwei1419
链接:https://leetcode.cn/circle/discuss/xFI0Il/view/ReA0Nq/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

标签:力扣,建议,自己,问题,算法,思路,刷题
From: https://www.cnblogs.com/gongxianjin/p/17868937.html

相关文章

  • 1000多页!LeetCode刷题手册分享
    这本手册确实是一部令人印象深刻的作品。(手册链接在文末!!!)首先,内容充实是这本手册的一大亮点。它涵盖了广泛的算法和数据结构主题,包括数组、链表、树、图、排序算法、动态规划等等。每个主题都有详细的解释、示例代码和复杂度分析,帮助读者深入理解和掌握相关知识。此外,手册还提供......
  • 比赛刷题:crypto
    html解密 点进去然后要输入password,直接在网页上面找呗brainfuck 直接动用工具,就像标题一样,然后解码的时候需要点击BrainfuckToText就可以得出啦,其他的是错的 刷个题吧 嗯,知道大致思路,就是被坑了,连续解三次base64才可以得出结果base32 根据题目嘛,直接采用base32......
  • 前端歌谣的刷题之路-第一百零九题-双向数据绑定
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • 算法刷题记录-数组之和
    算法刷题记录-数组之和四数相加Ⅱ给你四个整数数组nums1、nums2、nums3和nums4,数组长度都是n,请你计算有多少个元组(i,j,k,l)能满足:0<=i,j,k,l<nnums1[i]+nums2[j]+nums3[k]+nums4[l]==0示例1:输入:nums1=[1,2],nums2=[-2,-1],nums3=[-1,......
  • 为什么我强烈建议大家找实习?
    大家好,我是鱼皮,前两天编程导航的鱼友向我提了一个关于学习规划的问题,蛮有代表性的,给大家分享一下。鱼友提问鱼皮你好,我是一位大二、软件工程专业的同学,最近在学设计模式和操作系统,项目已经做完了伙伴匹配系统、智能BI、和聚合搜索项目(正在上线),想问几个问题:1)之前你说过寒假实习在......
  • 蓝桥杯刷题
    题目:门牌制作-蓝桥云课(lanqiao.cn)sum=0foriinrange(1,2021):s=str(i)sum+=s.count('2');print(sum)题目:卡片-蓝桥云课(lanqiao.cn)importosimportsys#请在此输入您的代码num=0foriinrange(1,100000):num+=str(i).count('1')if(num>......
  • 刷题复习(一)链表-双指针
    刷题复习(一)链表-双指针https://labuladong.gitee.io/algo/di-ling-zh-bfe1b/shuang-zhi-0f7cc/1、合并两个有序链表思路清晰,双链表有个根节点记录开头/***Definitionforsingly-linkedlist.*publicclassListNode{*intval;*ListNodenext;*ListNode(){}......
  • 前端歌谣的刷题之路-第一百零五题-监听对象
     前言我是歌谣我有个兄弟巅峰的时候排名c站总榜19叫前端小歌谣曾经我花了三年的时间创作了他现在我要用五年的时间超越他今天又是接近兄弟的一天人生难免坎坷大不了从头再来歌谣的意志是永恒的放弃很容易但是坚持一定很酷本题目源自于牛客网微信公众号前端小歌谣题目......
  • W3C 正式将 DRM 保护纳入 HTML5 建议标准
     不顾近30%的成员反对,W3C(万维网联盟)正式宣布将加密媒体扩展(EME)——即集成DRM数字版权保护的API纳入HTML5建议标准。EME一直以来都备受争议,EME由Google、Microsoft和Netflix等公司的工程师联合开发,其提供了一系列API,旨在让浏览器无需插件播放DRM保护的多......
  • 为什么 IDEA 建议去掉 StringBuilder,而要使用 “+” 拼接字符串?
    作者:京东零售姜波来源:京东云开发者社区各位小伙伴在字符串拼接时应该都见过下面这种提示:内容翻译:报告StringBuffer、StringBuilder或StringJoiner的任何用法,这些用法可以用单个java.lang.String串联来替换。使用字符串串联可以使代码更短、更简单。只有当得到的串联至少与原......