许久没更了,新的一年我也将更新我2017的第一篇博客。趁新年放假之际,我又重新将LeetCode上面的题目刷了一遍,不同于之前的是,这次我详细记录了自己刷题时候的感想心得、被系统accept的答案、自己的思路以及错题反思以供大家参考。为了让大家跟我一个步伐,所以我从难易程度为easy的题目再一次刷起,希望算法能力有所提高的小伙伴来跟我一起同步再刷一次LeetCode吧!
所做过的题目答案已上传到我的Github, Click here! 需要收藏的不妨star一下吧。
为什么要刷题
虽然刷题一直饱受诟病,不过不可否认刷题确实能锻炼我们的编程能力,相信每个认真刷题的人都会有体会。现在提供在线编程评测的平台有很多,比较有名的有 hihocoder,LintCode,以及这里我们关注的 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粗略判断你的代码是否符合要求,待出现的output和expected 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交流1群:659957958。
2018.4.21更:如果群1已满或者无法加入,请加Java学习交流2群:305335626 。
联系
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.