程序员编程艺术:面试和算法心得

jopen 10年前

About

看过结构之法算法之道blog的朋友可能知道,从2010年10月起,July 开始整理一个微软面试100题的系列,他在整理这个系列的过程当中,越来越强烈的感觉到,可以从那100题中精选一些更为典型的题,每一题详细阐述成章,不断优化,于此,便成了程序员编程艺术系列。

原编程艺术系列从2011年4月至今,写了42个编程问题,在创作的过程当中,得到了很多朋友的支持,特别是博客上随时都会有朋友不断留言,或提出改进建议,或show出自己的思路、代码,或指正bug。

为了方便大家更好的改进、优化、增补编程艺术系列,特把博客上的这个程序员编程艺术系列和博客内其它部分经典文章同步到此,成立本项目「Csdn 600万博客结构之法算法之道部分经典博文优化版:《程序员编程艺术 — 面试和算法心得》」,邀请各位一起修正和优化。

若发现任何问题、错误、bug,或可以优化的每一段代码,欢迎随时pull request或发issue反馈,thanks。

Start Reading

How To Contribute

你可以做以上任何一件或几件事情,如遇到任何问题或疑惑,咱们可以随时讨论: https://github.com/julycoding/The-Art-Of-Programming-by-July/issues?state=open。「如不知如何在github上提交及同步作者的更新,可参考此文:http://www.cnblogs.com/rubylouvre/archive/2013/01/24/2874694.html

Code Style

本项目暂约定以下代码风格(不断逐条添加中):

  • 关于空格
    • 所有代码使用4个空格缩进
    • 运算符后使用一个空格
    • "," 和for循环语句中的";" 后面跟上一个空格
    • 条件、分支保留字,如 if for while else switch 后留出一个空格
    • "[]", "."和"->" 前后不留空格
    </li>
  • 用空行把大块代码分成逻辑上的“段落
  • C 指针中的指针符靠近类型名,如写成int* p,而不写成int *p
  • 关于标点
    • 中文表述,使用中文全角的标点符号,如:()、。,?
    • 数学公式(包括文中混排的公式)和英文代码,使用英文半角的标点符号,如:(),.?…
    • </ul> </li>
    • 关于注释
      • 注释统一用中文
      • 尽量统一用"//",一般不用"/*...*/"
      • </ul> </li>
      • 关于命名
        • 类名为大写字母开头的单词组合
        • 函数名比较长,由多个单词组成的,每个单词的首字母大写,如int MaxSubArray();函数名很短,由一个单词组成,首字母小写,比如int swap()
        • 变量名比较长,由多个单词组成的,首个单词的首字母小写,后面紧跟单词的首字母大写,如maxEnd;变量名很短,由一个单词组成,首字母小写,如left
        • 变量尽量使用全名,能够描述所要实现的功能,如 highestTemprature;对于已经公认了的写法才使用缩写,如 tmp mid prev next
        • 变量名能“望文生义”,如v1, v2不如area, height
        • 常量的命名都是大写字母的单词,之间用下划线隔开,比如MY_CONSTANT
        • il < 4384 和 inputLength < MAX_INPUT_LENGTH,后一种写法更好
        • </ul> </li>
        • 一个函数只专注做一件事
        • 时间复杂度小写表示,如O(nlogn),而不写成O(N*logN)
        • 正文中绝大部分采用C实现,少量C++代码,即以C为主,但不去刻意排斥回避C++;
        • 关于的地得
          • 形容词(代词) + 的 + 名词,例如:我的小苹果
          • 副词 + 地 + 动词,例如:慢慢地走
          • 动词 + 得 + 副词,例如:走得很快
          • </ul> </li>
          • 关于参考文献
            • 格式:主要责任者.书名〔文献类型标识 ] .其他责任者.版本.出版地:出版者,出版年.文献数量.丛编项.附注项.文献标准编号。例子:1 刘少奇.论共产党员的修养.修订 2 版.北京:人民出版社,1962.76 页.
            • </ul> </li>
            • 专业术语