Day29:刷起来! leetcode

https://ithelp.ithome.com.tw/upload/images/20210928/20128604FEN4QjPpAK.png
leetcode可以说是工程师的试炼场,收集了许多公司的面试考题,可说是题海无涯,那麽就开始刷题之旅吧! leetcode可以直接用github帐号登入,不用另外申请帐号,非常方便。

选择选单列的Problems就可以看到题目列表了!
https://ithelp.ithome.com.tw/upload/images/20210928/20128604ZThMdydZHf.png

leetcode很贴心依照题型做分类,这边选择expand可以看到更多分类。
https://ithelp.ithome.com.tw/upload/images/20210928/20128604nRB3vyeIka.png

如果想练习特定类型的题目,可以直接点选该分类,就会看到所有相关的题目罗!像是双指针Two Pointers
https://ithelp.ithome.com.tw/upload/images/20210928/20128604Zi4cP3LDu5.png

不过如果你没有想练的特定类型的题目也没关系,下面的题目列表可以做初步的筛选,一开始先筛选出easy的题目来练习吧! 不过如果你天生神力,直接挑战medium难度以上的题目也是没问题的!Acceptance是题目的通过率,越低代表通过的人越少。
https://ithelp.ithome.com.tw/upload/images/20210928/20128604UK3TwRq7Vu.png

右边会有个小小面板纪录你的刷题情形,提醒你"题海无涯"/images/emoticon/emoticon13.gif
https://ithelp.ithome.com.tw/upload/images/20210928/20128604DKJ0JJ3GPn.png

让我们直接选一题来开始解题吧!,画面的左边是题目叙述,看完叙述如果有看没有懂,可以搭配example来理解题目要表达的意思。
https://ithelp.ithome.com.tw/upload/images/20210928/20128604arXlTW0npY.png

右边则是解题区域,可以选择自己熟悉的程序语言来解题
https://ithelp.ithome.com.tw/upload/images/20210928/20128604e1chyuBkXE.png

作答完之後,可以按右下角的Run Code来看第一次test case看有没有通过,如果有通过,觉得自己写的差不多了,就可以按下Submit了。
https://ithelp.ithome.com.tw/upload/images/20210928/201286042WtNpwl7Ot.png
按下Run code後 执行一次test case

这时候题目就会开始跑很多test case,以下面那题的例子来说,有1032个test case,如果有些edge case没考虑到的话,你的程序码可能就爆掉了,不会通过测试,接着就会看到下面这样的讯息,输入-123 预期要输出-321,结果却是输出NaN。
https://ithelp.ithome.com.tw/upload/images/20210928/20128604MSUx6TibB8.png

甚麽是edge case?

边界条件,测试程序在一些很极端的情况或条件下执行,是否还能正常运作。

假如我们成功通过了所有的test case,恭喜你! 就会看到Success的画面,告诉你程序的执行时间和执行效率跟其它提交者相比快了多少,以及记忆体的用量状况,下面的next challenges则是推荐相关或是相似的题目给你。
https://ithelp.ithome.com.tw/upload/images/20210928/20128604yPIumg8H9T.png

下方会列出你的历史提交纪录,这边稍微解释一下status个别代表的意思
https://ithelp.ithome.com.tw/upload/images/20210928/20128604iuso6TyWXC.png

  • Accepted - 解题方法通过了所有的test case
  • Wrong Answer - 解题方法并没有通过全部的test case
  • Output Limit Exceeded: 超过输出长度,提交前记得要把console.log注解或是拔掉,不然就会看到这个错误讯息了
  • Runtime Error: 执行时间错误,题目希望解题的时间复杂度为O(n)但你的解法却是O(n²),或是不小心写了无穷回圈

上面表格里的status都可以点击,就会看到每个提交答案执行时间的分布,看你落在哪个区间,有PR值的既视感
https://ithelp.ithome.com.tw/upload/images/20210928/20128604MsbBAXXZiQ.png

点击柱状图的话,会跳出一个弹窗,显示那个时间区间提交的程序码内容,这时候就可以参考一下别人的写法为甚麽执行效率比较好。
https://ithelp.ithome.com.tw/upload/images/20210928/20128604bMEPzOqIl5.png

不过有些题目真的是想破头都不知道怎麽解阿! 不是付费会员又不能看solution,该如何是好呢?之前都会Google leetcode xxx answer看别人的解法,其实根本不用这麽麻烦,可以去点击左上角页签的discuss,里面有很多人分享自己的解法。
https://ithelp.ithome.com.tw/upload/images/20210928/201286049ozHfiMWTb.png

在discuss里面可以在右边的标签区选择程序语言或是解题技巧的分类,假设我们想看javaSript的解题方法,就点选javaScript的标签。
https://ithelp.ithome.com.tw/upload/images/20210928/20128604nUb0THaRKK.png

就可以看到用javaScript作答的解题内容了,可以趁这个机会看一下别人的解题思路!
https://ithelp.ithome.com.tw/upload/images/20210928/20128604YAoHI9R8b3.png

以上就是leetcdoe的基本介绍,其实刷leetcdoe的过程很有趣,写出来的时候很有成就感,写不出来的时候很苦恼,但必须说这是需要刻意练习的,在ptt上看到大神分享刷题进Google的故事,特别设计了一套刷题的训练如下

  • easy 限制只有10分钟的作答时间,medium 20分钟,hard 30分钟
  • 只能按submit,不准按run code
  • 跟读书会的其他人交流解法,讨论是否还有优化空间

看完只能说奉上我的膝盖,这真的是需要毅力跟恒心才能办到,不过上述流程对於平凡人实在是太硬了,还是先依照自己的节奏来练习,可以培养每周刷几题的习惯,维持解题的手感,祝大家刷题愉快!


<<:  Day21-又给人贴标签 Labels and Selectors

>>:  「this」好七怪!

虚拟机 Vagrant

第30天了,来聊聊 vm/虚拟机 ... 如果只是想练习Linux的CLI,一定要在GCP上开ins...

[Day-14] while回圈

今天要来练习while回圈的部分 那这边就直接开始说明罗~ 程序码范例: while(条件判断){ ...

# Day6--一个很难驾驭的概念:闭包

闭包(closure)大概是我在函式这个单元过後,卡的稍微久一点的一个关卡,主要是弄不清楚闭包到底跟...

Day 20 - 实测盘中订阅 tick 与 bidask 资料是否有先後顺序 (下)

本篇重点 Quote-Binding Mode介绍 透过Quote-Binding Mode,将订阅...

第一天:目录

目录 09-01-2021 Bonjour! 接下来的 30 天里,每天一点小知识将写下我脑中盘之错...