/lintcode

lintcode题解/练习

Primary LanguageC++

LintCode题解

Sun Jun 10 15:32:31 2018,对这个网站基本无感,速度太慢了,所以改换其他网站了。 Always be coding!

选择语言为C++11,兼具底层细节又有丰富类库来避免重复造轮子。

所有代码均通过Lintcode在线检测, 同时也考虑了诸如内存泄露等产品级需求, 命名规范参考了Google C++命名[fn:1], 许多代码中注释的部分比如List/Tree的定义, 在源码中都打开了, 为的是本地调试需要。 所以在进行在线检测时请把相关定义删掉以免造成在线编译不通过。

基本上代码都经过clang-format format过的(和gofmt类似)。

./img/all.png

简要说明:

举例来说明: 一个lintcode题目的url为: http://www.lintcode.com/zh-cn/problem/word-search-ii/ 则对应的文件名为 ./src/word-search-ii.cc, 在该文件中第一行的内容即为此URL的注释(此行内容是根据文件名再生成自动添加上)如果你是在Emacs中编辑此文件则可以在URL上M-x browse-url来打开这个链接, 因此对于题目的说明不会在文件中重复, 当然缺点就是你得有网络. 或者你可以在有网络的情况下根据这里的文件名写一个shell用wget全部download下来, 这样就可以躲到深山老林里刷这些题目了。如果有多个解答,有些函数名就会有些后缀,或者是方法或者是TLE这种超时版本,目的在于方便理解。

环境选择:

OS选择Ubuntu,作为一个后端程序员在Linux上开发习惯了,好处就是甚至可以从XWindow层去自定义、修改一些快捷键。OS的设计者 认为你自己知道自己在做什么,所以不拦你,当你GDB调试时不会跳出框子给你安全方面的确认(说你呢,MacOS)。

编辑器选择:

Emacs outshines all other editing software in approximately the same way that the noonday sun does the stars. It is not just bigger and brighter; it simply makes everything else vanish – In the Beginning was the Command Line[fn:2]

写代码是一种不断人机交互过程,输入、验证做这样的循环迭代过程,好的编辑器可以加速这一过程的处理。Vim是,Emacs也是。 如果你使用Vim, 有15年使用经验的人的一些总结[fn:3]可以参考一下,四年前他写的11年经验总结[fn:4]同样可以参考一下, 使用Emacs推荐…额,因为每个使用Emacs的方式都不一样(Emacs Hell)就不推荐了。

这里具体涉及到的刷题方面的编辑器功能有:

  1. 快速编译: 刷题一般都是单个文件,没有Makefile,所以这里需要对单个文件进行快速编译和运行。一般这种情况是编辑,之后切换窗口到命令行执行相关操作遇到问题再回到编辑器中,这些循环单调规律的调试过程同样可以用代码在Emacs中固定下来。所以可以在一个Editor中实现这些功能。
  2. gdb集成: GUD模式可以方便的进行gdb调试,对递归的理解,对一些边缘case的确认,当然还有debug。
  3. 常用模板的快速插入
  4. git提交: magit是我认为最好用的git工具,没有之一,push/commit完全在一个编辑流当中,这里不展开。
  5. lint、代码补全:我选择的YCMD和Emacs客户端来进行补全。Flyheck来进行代码lint。

上述过程的一些截图

快速编译的过程

./img/compile.gif

单步调试

./img/debug.gif

清明到来,我就38岁了,日暮乡关之感如针锥心

薄雾从村头飘来,坐在橘园里,一些病果尚在枝头

蒲公英又一次开出黄色的花,如一年一发的寂寞

能够思念的人越来越少。我渐渐原谅了人世的凉薄

如果回到过去,我确定会把爱过的人再爱一遍

把疼痛过的再疼一遍

但是我多么希望没有病痛的日子,一年或者一星期

在春天的风里跳舞,踮起脚旋转

他能看见也好,看不见也罢

我只有一个愿望:生命静好,余生平安

在春天的列车上有人为我让座

不是因为我摇晃的身体

– 《人到中年》 余秀华

Footnotes

[fn:1] https://google.github.io/styleguide/cppguide.html

[fn:2] http://cristal.inria.fr/~weis/info/commandline.html

[fn:3] https://statico.github.io/vim3.html

[fn:4] https://statico.github.io/vim.html