Redian新闻
>
刷力扣题想要做到 Bug Free 需培养怎样的思维?

刷力扣题想要做到 Bug Free 需培养怎样的思维?

公众号新闻

首先,刷题、写代码想要快速入门并达到 Bug Free 的水平是几乎不可能的,只有勤练习,才可以逐渐全面自己思考问题的角度,减少编写代码时候的漏洞。而在炼成 Bug Free 的漫漫长路上,又有两重坎:写无 Bug 的代码和周全的算法。

当然,想要达到这两重砍的训练方法和我们平时在力扣由浅入深学习算法题的训练是一致的。

总的思路可分为几个步骤,第一步先练好写基本代码的能力,做到想实现什么功能就能不假思索地码出简洁的代码来、指哪打哪、快准稳狠。

接着后续再提升自己思维能力和考虑问题的周全性,同时积累一定的做题经验,面对题目时要能快速发现坑点,有能力构造一些特殊数据,测试自己程序的健壮性。

具体来说,写出没 Bug 的代码,其实秘籍只有两个字:练习。但光如此还不够,可能会忽略一些关键问题。

想要快速提升编写代码的能力,你需要注意力扣君提示的下面几点。

易出错需反复确认

如果反复思索多次,还不明白关键信息,那可以通过画图或者手动几组数据测试的方法进行摸索。在此过程中,你觉得哪里才是容易出错的地方?

这就得靠我们平时写代码时需多踩坑,多积累。

正如一些同学所说,发现每次遇到 For 循环操作 String 的时候,总会出现一些边界问题。这其实就是对容易出错地方的一种总结,下次再写到的时候多注意就不会出 Bug 了。

借鉴方法

学习优质的写法慢慢形成自己的风格。举个例子,比如刚开始写二分时,很多人都会左开右闭、左闭右开分不清。倒不如先学习一个简单的记录答案写法,保证自己遇到这类问题肯定能写对,然后随着刷题量的增加慢慢领悟其他写法。这也算是一种先借鉴,后续通过自己能力的自然提升,了解到其中的道理。

int left=1, right=Inf, ans=Inf;while(left<=right){    int mid=(left+right)/2;    if (check(mid)){        ans=min(ans, mid);      right=mid-1;    }else left=mid+1;}

别炫技敲代码

可能是影视作品看多了,总感觉代码写的越炫越牛叉,但在现实中并非如此。

自己写的代码,将来可能是给未来的自己、比赛队友或者工作同事看的,为了不找麻烦,尽可能的写简单明了一点。比如:勤用临时变量,函数名、变量名赋予些意义,逻辑运算、位运算、代数运算混在一起的地方多用几个括号标明运算顺序等等。

总之,就是让下一个阅读这段代码的人更容易理解它,不用对着某一处代码发呆很久还不理解意义,这些方法也能让自己在检查代码过程中更加顺利。

养成检查代码的习惯

自检的过程非常重要,写完整段代码或者功能块之后,做到立即查阅,检查一些有明显逻辑错误或者代码笔误的地方,将低级错误扼杀在摇篮里。

另一方面就是算法了,写代码之前,保证算法的正确性尤为重要。想想看,如果自己写了半天代码,结果发现实现的一个假算法,我想你应该会崩溃。那么如何杜绝假算法呢?力扣君再教大家几招。


  • 正确理解题意

做题的过程中,总会遇到一些意思含糊的题目,导致我们第一遍阅读时理解错了题意。如果此时立刻开始想题、写代码,可能到了测试题目样例的环节才会发现自己对题意理解有些许偏差。

浪费了很多时间不说,还凭空给自己添加负面的情绪。比较推荐的做法是,先读题,接着通过手算样例理解一遍题意,这样不仅能二次确认,也可对之后的想题环节提供帮助。


  • 想好了再敲,构造边界数据测试程序

对于某个题目,如果有了一些思路,一定要将这个思路理清楚,细节讨论明白。绝对不能先写,再等实现了去想细节,一些节点没想清楚的地方,都是将来可能导致 Bug 的隐患所在。确认了一个完整算法之后,也要手动造一些特殊数据来测试它的正确性。


  • 代码复杂且难写,可能是算法不够完美

有两种情况,写的很快但可读性差,这种应该叫做码农。但简单的代码,写的时间很长,那么大概率是顶尖程序员。

之前有个同学与力扣君分享,在阿里实习期间,曾经看到过两位 P8 为了一段几十行的代码,讨论了一个下午,当时以为是很难的代码,后面去观摩了之后发现,就是简单的查询代码。

就这段看起来很简单的代码,两位大佬却手把手花了 4 个多小时教他不断优化,那一刻他才明白啥叫“编程”,这可能就是码农和程序员的区别。所以好的代码应该是考虑充分能复用且可扩展极强的。

写在最后

希望这篇文章对正在刷题的初学者们有所启发,祝大家早日成为无 Bug Free  的程序员~。


BY / 

本文作者:力扣

编辑&版式:Janson

声明:本文归“力扣”版权所有,如需转载请联系。


点个在看,少个 bug

微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
IEEE is Your Professional Home - 会员精选视频为你诠释“IEEE如何引领你的专业发展”这项重要的思维能力,大部分爸妈都不知道怎么培养(文末有福利)投稿延期 | IEEE ICC 2023(IEEE国际通信会议)力扣刷题技巧篇|程序员萌新如何高效刷题Bikini法律服务产品大赛渐热,背后是律所怎样的思考?跨性别选手暴力扣杀,女排球员用脸接球导致脑震荡两周...力扣秋招全攻略|刷对题、刷好题、刷出好 OfferLeetCode 力扣官方题解 | 969. 煎饼排序LeetCode 力扣官方题解 | 537. 复数乘法英国黄金周大促!比斯特折上8折、Fresh全场75折、Selfridges低至3折!美国跨性别选手暴力扣杀,女排球员用脸“接球”直接晕倒……For Gen-Z, Entrepreneurship Represents a Ticket to Freedom已来到 “后云原生时代” 的我们,如何规模化运维?酒店Bug价:6美元入住吴哥窟畔豪华五星级度假酒店,2023年大量日期有BugLeetCode 力扣官方题解 | 917. 仅仅反转字母LeetCode 力扣官方题解 | 838. 推多米诺《西罗普郡一少年》:15: 别看我的双眼程序员必须要掌握的算法技术要点|附赠力扣大厂面试题LeetCode 力扣官方题解 | 1791. 找出星型图的中心节点MeetFresh鲜芋仙Darling Square店开业了!红遍全球,City的小伙伴终于等到了!美国跨性别选手暴力扣杀,女排球员“接球”直接晕倒……力扣特别策划 | 挑战不可能的运算普麻烦大了,会坐牢吗?《山居续忆》:第一章:外公外婆及其他:十六、三迁住处“周五之前”是 before Friday 还是 by Friday?| 1 min learning English夏日里的聚会西班牙公主被传恋上加维?绯闻男友另有其人,疑似身价17亿的摩洛哥王子…Keeping Your Hands Free 解放双手,只做最重要的事,对话连续创业者、投资人好友从零开始构建业务异常检测系统,FreeWheel面临过的问题和解决方案一位从教27年老教师的忠告:想要孩子上好网课,家长一定要做到这4点LeetCode 力扣官方题解 | 2016. 增量元素之间的最大差值不谈性的人,没法谈恋爱?| 你有怎样的性态度,就有怎样的爱情命运如何用“总裁式思维”提升自己的思维层级高效工作法—用思维导图打开你的思维
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。