LeetCode浅谈

许久没更了,新的一年我也将更新我2017的第一篇博客。趁新年放假之际,我又重新将LeetCode上面的题目刷了一遍,不同于之前的是,这次我详细记录了自己刷题时候的感想心得、被系统accept的答案、自己的思路以及错题反思以供大家参考。为了让大家跟我一个步伐,所以我从难易程度为easy的题目再一次刷起,希望算法能力有所提高的小伙伴来跟我一起同步再刷一次LeetCode吧!

所做过的题目答案已上传到我的Github, Click here! 需要收藏的不妨star一下吧。

为什么要刷题

虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。现在提供在线编程评测的平台有很多,比较有名的有 hihocoderLintCode,以及这里我们关注的 LeetCode

下图是LeetCode平台上统计的各种编程语言在LeetCode上提交的算法解决方法运行时间长短:

LeetCode 是一个非常棒的 OJ(Online Judge)平台,收集了许多公司的面试题目。相对其他 OJ 平台而言,有着下面的几个优点:

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

为什么要这么看重算法还需要特地刷LeetCode甚至5、6遍 ? 一句话:可能这就是区分程序员和码农很大的特点吧。

下面是我刷 LeetCode 的一些收获以及文章开头附上的自己用Java解决LeetCode上算法的源码,希望能够引诱大家有空时刷刷题目。

如何合理利用LeetCode

我当初进入leetcode是完全蒙蔽的,全英文的界面、全英文的题目,总之一切都是全英文的,然而你要相信的是:了解一个工具或者平台,真的只需要几分钟的时间。

看了很多人写了关于LeetCode指南的文章,共同的特点就是:介绍刷LeetCode对提高自己的算法能力如何如何重要,再就是给你介绍介绍LeetCode平台的特征等等…然后也没人教你第一步也就是如何去使用这个平台,例如点击这个按钮能干嘛能干嘛,如何进入刷题系统等等…(很多人会想,都进入LeetCode官网了,难道会不知道咋进入刷题页面吗?没错,第一次进入该平台的我面对如此庞大的全英文,确实是摸不到头脑。然而我的文章一向保持着照顾新人的态度来书写的)也难怪,毕竟大神是不必在乎这些小细节的…我这里就不厌其烦的对自己第一次使用LeetCode平台时的感受浅谈几点吧。

第一次进入LeetCode官网,首先肯定是要点击Sign in按钮输入自己的账号和密码的,建议快速登录选择使用github登录,好处不用我多说,登录系统后出现下面这个界面:

然后点击左下方的Start coding now按钮,这时页面会跳转到另一个随机出现的题目,例如下图:

这时咋办?鼠标移到上方Problems菜单栏,选择Algorithms:

就可以跳转到LeetCode所有题的列表页了,如下:

然后便可以选择相应的题目进行答题了,建议从难易程度为easy的题目刷起,这样往后你就会越刷越有信心,当然有个把题目你要是想了1、2两个小时,这都是正常的不要害怕,刷着刷着你的算法能力就上去了,刷着刷着你的速度也快了。例如我这里选择第一题Two Sum然后进入如下页面,这个页面我要给大家讲讲相应的界面元素:

上面这行英文字母当然就是系统为你布置的题目啦:

英文底子不好的连题目都看不懂的,建议安装一款插件,我用的浏览器是Chrome,用了一款叫划词翻译的插件,还是挺不错的,选择页面中相应的英文或其它不是中文的文然后点击下面出现的”译”就可以将文字翻译成相对准确的中文了。(要是没有相关条件的人,可以看看我传在github中的代码答案,因为我在代码中把题目都翻译成了中文并写在了代码中)

下面的Example,当然就是系统给你举的例子了,例如给你一个输入,然后通过你编写的算法应该得出与它一致的输出:

下方的这个框框就是你的答题区域咯,你可以选择相应的编程语言了然后进行答题:

编写完成后,你就可以点击下面的按钮:

点击这个Run Code按钮表示运行一下你的代码,然后系统检测通过上面给出的Example粗略判断你的代码是否符合要求,待出现的outputexpected output一致后你就可以点击下面这个Submit Solution按钮进行提交自己的代码至系统了:

有趣的是点击这个按钮后若你的算法代码被系统Accepted后,还会给你生成一幅你这个算法时间复杂度的一个图表,是不是很高大上!

当然,当你要是实在对题目没有头绪时,不妨点击中间的discuss按钮:

点击后,你就可以进入这个题目背后各种LeetCode好友提供的自己的答案,还可以为你觉得写的好的答案支持一下,支持数越多的答案当然就会被排在前面。

那么问题来了,既然这个界面有每个题目的答案,我又为什么要在github上提供自己的答案呢?很简单啊,因为我在将我的代码上传至github之前我当然也拿自己的答案和上面的答案进行对比了,我的答案多了这些:

  • 1.多种合适当前题目的时间复杂度最低又好理解的答案。
  • 2.我自己没被通过的答案,以及我的反思,自己错在哪里。
  • 3.最重要的是我将题目都在答案中抄了一遍,中英文都有哦。

说了这么多功能,当然更多的是需要你自己去摸索了,点击的次数多了,遇到的坑多了,自己自然也就熟悉了。

至于我上传在github上的源码,那逼格可高多啦,除了记录了我详细的解题思路,最重要的是README.md可是采用全英文写的呢! like this :

LeetCode Algorithm

This form includes:

  • 1.the question’s numbers marking by “#”.
  • 2.the question’s title with its address in LeetCode marking by “Title”.
  • 3.the question’s Java algorithm solutions with its address in my github marking by “Solution”.
  • 4.the difficulty about this question.

And in my solutions code , it includes:

  • 1.the title about this question with English and Chinese version.
  • 2.the right questions more than one.
  • 3.the wrong question that I did the first time.
  • 4.why I did the wrong answer,how I think in that time.

others:”*” represents something I didn’t finish.

Hope it helps you in algorithm learning. Have fun!

# Title Solution Difficulty
1 Two Sum Java easy
2 Add Two Numbers Java Medium
7 Reverse Integer Java easy
9 Palindrome Number Java easy
13 Roman to Integer Java easy
14 Longest Common Prefix Java easy
20 Valid Parentheses Java easy
21 Merge Two Sorted Lists Java easy
26 Remove Duplicates from Sorted Array Java easy
27 Remove Element Java easy
28 Implement strStr() Java easy
35 Search Insert Position Java easy
38 Count and Say Java easy

是不是很6?hhh,2016悄然过去,相信小伙伴们在反思过去的同时也一定成长了不少,新的一年,希望大家带着以往的梦想,继续前进!

2017.04.01更

突然发现又把LeetCode上面的题目刷完了一遍,然而我太懒了所以的题目都只在LeetCode官网上的OJ平台跑了一遍,也只将前面的题目答案整理到了自己的Github上,后面的题目没有整理…呃大家要不在刷题的时候就查看LeetCode讨论区各个伙伴们贡献的答案吧,我就等以后哪天再刷的时候再整理自己的刷题过程吧。(当然希望我那时候不要太懒…

2018.3.19更

欢迎加入我的Java交流群:659957958。群里目前已有1800人,每天都非常活跃,但为了筛选掉那些不怀好意的朋友进来搞破坏,所以目前入群方式已改成了付费方式,你只需要支付9块钱,即可获取到群文件中的所有干货以及群里面各位前辈们的疑惑解答;为了鼓励良好风气的发展,让每个新人提出的问题都得到解决,所以我将得到的入群收费收入都以红包的形式发放到那些主动给新手们解决疑惑的朋友手中。在这里,我们除了谈技术,还谈生活、谈理想;在这里,我们为你的学习方向指明方向,为你以后的求职道路提供指路明灯;在这里,我们把所有好用的干货都与你分享。还在等什么,快加入我们吧!

2018.4.21更:如果群1无法加入,请加Java学习交流2群:305335626 。群2作为群1的附属群,除了日常的技术交流、资料分享、学习方向指明外,还会在每年互联网的秋春招时节在群内发布大量的互联网内推方式,话不多说,快上车吧!

联系

If you have some questions after you see this article,you can tell your doubts in the comments area or you can find some info by clicking these links.

坚持原创技术分享,您的支持将鼓励我继续创作!