Hello 大家好,我是Alex,今天来说明一下Matrix工作室每日一题的刷题指南,虽然刷题一直饱受诟病,很多人不想刷题,但不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。

现在提供的在线编程评测平台有很多,并且也分了两个方向,一个是偏向于面试找工作,比较著名的就是LeetCode,另一个是偏向于算法竞赛,比较著名的有CodeForce,UVA等等,我们经常说的打CF可不是穿越火线,而是CodeForce,这两个不仅完全没有关系,并且难度也不是一个层级的。

咱们今天还是重点说说LeetCode这个平台,这是一个非常棒的OJ(Online Judge)平台,收集了许多公司的面试题目,相对其他OJ而言,LeetCode具有很多优点:

  • 题目全部来自业内大厂的真实面试题;
  • 不用处理输入输出,精力全放在解决具体问题上;
  • 题目由丰富的题解,可以参考别人的思路;
  • 精确了解自己的代码在所有提交代码中运行效率的排名;
  • 支持多种主流语言:C/C++、Python、Java、Js、Go等等。

废话不多说,那我们接下来就开始。

一、账号

用LeetCode之前首先你肯定得有一个账号,可以是QQ或者微信登录,也可以用GitHub登录。

二、每日一题

其实LeetCode是有每日一题的,比如今天的:

一般来说,平常工作日都是简单或者中等难度的题目,大概十几分钟就能解决,有些比较麻烦的可能需要几十分钟,周末经常会出困难级别的题目,光思路就得想十几分钟,实现出来又得十几分钟,然后花时间调试和改bug,最后终于AC(Accepted)了,还得去题解学习学习大师级别的代码,基本上一个多小时过去了。

当然,咱们工作室的每日一题也会从LeetCode上出,但并不一定是LeetCode上的每日一题,因为考虑到一些大一的同学并没有学过算法和数据结构,所以各个组长会根据组员的学习进度,先从简单的题目中找适合你们的题目,布置成作业,等大家逐渐熟练之后,会慢慢的转为LeetCode上的每日一题,这样就统一了。

三、刷题套路

以今天的每日一题:925. 长按键入为例,我们进入问题详情页后:

可以看到左边是题目描述以及一些输入输出样例,右边是在线代码编辑区,我们等会提交代码就得从这里提交。

简单读一下题目925. 长按键入,有的时候题目会比较晦涩难懂,尤其是一些英文翻译题甚至直接就是英文题目,这个时候也不用慌,有的时候题目没读懂也没关系,我们可以研究研究输入输出样例。

如果能把输入输出样例搞懂了,那也能把题做对。

读懂了题目之后,我们要做三件事:

  1. 解题思路;
  2. 确定算法;
  3. 确定数据结构。

这题呢比较简单,所以我们就简单说一下思路就可以了。

通过题意可以知道,就是判断name是否为typed的子序列,我们可以使用双指针i, j追踪name和typed的位置,依次判断当前遍历的字符是否相等,如果不等的话,判断是否是长按键入多次了,如果不是,那就返回False,到最后,如果i = len(name),说明name的每个字符都被匹配了。

然后我们就可以开始写代码了,之前我们说过,在LeetCode上我们不需要花时间处理输入和输出,它在后台评判的时候已经帮我们做好了,我们只需要实现具体的代码逻辑。

以Python3为例:

class Solution:def isLongPressedName(self, name: str, typed: str) -> bool:

对于还没学过类和对象的同学,简单说一下这是什么,不需要了解具体的意义,知道怎么做就行。

我们一般不直接在LeetCode的在线编辑器上写代码,一点都不舒服,所以我们把它复制到PyCharm,然后写一个模板:

class Solution:def isLongPressedName(self, name: str, typed: str) -> bool:passif __name__ == '__main__':s = Solution()print(s.isLongPressedName(name="alex", typed="aaleex"))

这个模板呢,基本上是通用的,就是在主函数里实例化一个Solution()对象s,然后通过s调用相应的方法isLongPressedName,能运行通之后,我们就可以在isLongPressedName中编写相应的算法逻辑了。

class Solution:def isLongPressedName(self, name: str, typed: str) -> bool:i, j = 0, 0while j < len(typed):if i < len(name) and name[i] == typed[j]:i += 1j += 1elif j > 0 and typed[j] == typed[j - 1]:j += 1else:return Falsereturn i == len(name)if __name__ == '__main__':s = Solution()print(s.isLongPressedName(name="alex", typed="aaleex"))print(s.isLongPressedName(name="saeed", typed="ssaaedd"))print(s.isLongPressedName(name="leelee", typed="lleeelee"))

最后我们把写完的Solution()类复制回LeetCode的在线编辑器,提交评测,通过了之后,你就可以看到你的代码在所有提交代码中运行效率的排名,然后还可以分享你的解题思路。

那如果我们写的代码逻辑有问题,没有通过评测呢,我们来试一下提交一个错误的代码:

class Solution:def isLongPressedName(self, name: str, typed: str) -> bool:i, j = 0, 0while j < len(typed):if i < len(name) and name[i] == typed[j]:i += 1j += 1elif j > 0 and typed[j] == typed[j - 1]:i += 1j += 1else:return Falsereturn i == len(name)

它会给我们显示解答错误,并且呢提供执行错误的输入输出样例。

还有一种错误是我们的语法有问题,比如我们少了一个冒号:

class Solution:def isLongPressedName(self, name: str, typed: str) -> bool:i, j = 0, 0while j < len(typed):if i < len(name) and name[i] == typed[j]:i += 1j += 1elif j > 0 and typed[j] == typed[j - 1]i += 1j += 1else:return Falsereturn i == len(name)

它给我们显示执行出错,可以看一下错误详情:

它会帮我们标注出来哪里出错,出了什么错,还贴心的画了一条红线。

题解

如果说LeetCode上面的题目是一块块金子的话,那么题解就是一个大矿山,多少次当你绞尽脑汁终于AC,准备去题解区吹牛逼的时候,迎接你的是众多大师级别的代码,你就只能高呼卧槽,我怎么没想到,然后闭关去思考那些强悍的代码是什么逻辑,顺便默默鄙视了一眼自己的。

所以,AC之后并不是就万事大吉了,还要去观摩一下题解,学习他们的思路。


好了,今天的分享就到这,拜拜。

Matrix Studio LeetCode 刷题指南相关推荐

  1. LeetCode刷题指南——题目精选1

    这是LeetCode经典题目总结文章~ 基础:将数据结构及算法学习的差不多,LeetCode题目按类别刷题及总结,参考鄙人数据结构及算法系列文章~ 按类别将每类题目做好,大概刷250道左右的程度即可. ...

  2. Leetcode-How-What 力扣Leetcode刷题指南

    Leetcode-How-What 力扣Leetcode刷题指南 About the way how to use Leetcode wisely for preparing the intervie ...

  3. 【恋上数据结构】复杂度知识以及LeetCode刷题指南

    基础知识 什么是算法? 如何评判一个算法的好坏? 大O表示法(Big O) 对数阶的细节 常见的复杂度 多个数据规模的情况 LeetCode刷题指南 斐波那契数列复杂度分析 斐波那契数列 - 递归 斐 ...

  4. LeetCode刷题指南

    CSDN话题挑战赛第1期 活动详情地址:https://marketing.csdn.net/p/bb5081d88a77db8d6ef45bb7b6ef3d7f 参赛话题:Leetcode刷题指南 ...

  5. LeetCode刷题指南!

    Datawhale学习 举办方:Datawhale.天池.LeetCode 为了帮助小伙伴更好地准备笔试,拿到春招offer,Datawhale联合天池.LeetCode推出24天刷题指南,组织了Le ...

  6. Leetcode刷题指南和top100题目

    原文链接:https://blog.csdn.net/qq_39521554/article/details/79160815 参考博文:https://blog.csdn.net/mmc2015/a ...

  7. 零基础新手学习算法Leetcode刷题指南

    刷算法到底在刷什么?这是很多人会想不明白的.而算法为什么这么重要,今天想说下这块内容.市面上都在说不要重复造轮子,这里说的不是你在一开始就不造轮子. 我们学习成长的过程是,先模仿,后改造,最终创新.所 ...

  8. LeetCode刷题指南(一)

    以下是我个人做题过程中的一些体会: 1. LeetCode的题库越来越大,截止到目前,已经有321个问题了.对于大多数人来说,没有时间也没有必要把所有题目都做一遍(时间充裕可以随意).刷个100题左右 ...

  9. leetcode 刷题指南

    说明: leetcode 有中英两版,个人喜欢中文版:虽然英文版的貌似逼格更高,但是毕竟咱们就是冲这刷着爽的感觉去的. 1. leetcode的输入输出方式 注意:在leetcode里面输入输出方式是 ...

最新文章

  1. 【BZOJ-3712】Fiolki LCA + 倍增 (idea题)
  2. python精度丢失_JS大坑之19位数的Number型精度丢失问题详解_稚终_前端开发者
  3. java 饼图 框架_Java 在 Excel 中创建饼图/环形图
  4. shell在指定目录下执行nohup_nohup:关闭shell程序依然执行
  5. 基于卷积神经网络的手写数字识别、python实现
  6. 项目经理如何才能快速成长?
  7. 转贴:Google Reader:信息背后的信息,无可替代的伟大
  8. 树莓派架设VNC服务
  9. 改变TMQQ2009版消息提示音
  10. 导出excel文件,若在一台PC端无法正常导出,闪退,进程还存在时(以下方法也许对你有用)
  11. 微型计算机原理中的mov,微机原理(判断题)(指令正误)
  12. 推荐一款免费的万能电子书格式转换工具电子书转换器NeatConverter
  13. 我的奋斗,不需要任何理由
  14. ABAP 新特性 - CORRESPONDING
  15. 基于STM32的ch438串口扩展芯片使用
  16. MySQL启动失败,试图访问许可验证文件时出错,请重新安装SQL Server来更正次文件
  17. 单片机设计资料,仿真、程序、原理图收集好资料分享,stm32、8086、单片机方案
  18. Android-UI开发(一)
  19. 自绘按钮实现颜色选择器
  20. MDict中最好用的英语、汉语词典

热门文章

  1. DRF (Django REST framework) 框架介绍
  2. java中将int类型数据存到数组中
  3. nginx 日志获取不到远程访问ip问题解决
  4. jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
  5. 【数据结构总结】第二章:线性表
  6. 湖南科技大学计算机控制技术,湖南科技大学控制理论与控制工程专业
  7. c语言中switch语句流程图_C语言:C语言保留字(关键字)
  8. Java黑皮书课后题第3章:**3.22(几何:点是否在圆内)编写程序,提示用户输入一个点(x,y),然后检查这个点是否在以(0,0)为圆心、半径为10的圆内
  9. WebDriver API 元素定位(三)
  10. Java SE之I/O流:知识框架