算法编程题的心得体会

  • 如果是在线笔试,一定要注意问题的规模,

    • 这牵涉到算法时间复杂度的要求
    • 也涉及相关数据结构的设计
      • 比如,一道关于郊游的题目,学生的规模最大才到 10 人;
        再考察学生之间的关系时,显然可以使用二维数组bool areFriends[10][10]
  • 如果是现场笔试,则要适时地向面试官提问,关于问题规模和环境的问题;
    提供多种算法解题思路,效率优先 ⇒ 贪心,方案优先 ⇒ 动态规划;

  • 如果是浮点类型,优先选择使用 double 而不是 float;

  • 一些相对高级的用法:比如 C++14 新特性,比如 Lambda 表达式,减少函数的定义(函数式编程),

1. 好的编程习惯

  • 将一些逻辑清晰,功能完整、且会重复使用的代码,从主函数中抽离出来,封装成独立的函数;

    比如多时钟之间的时钟同步问题,
    每一次开关的操做对所有时钟的影响,可以单独作为一个函数,
    是否所有的时钟都已被校准同步;

  • 变量名要有清晰的物理意义;

2. 算法实现中

  • 一次遍历下来,获取的有用信息可能有多个,不见得一定是区间的最小值,也可以同时维护区间的和等信息。

3. case 怎么用

  • 可根据 case 的输入情况,设计存储 case 的数据类型,
    • 如果一段数字,显然是数组,或者 vector;
    • 如果是一串字符,显然是 string,或者字符数组;

4. 围绕变量、数组以及其他数据结构展开

没有数据结构也就没有算法;

在进行进一步的算法流程之前,第一步设置合理的数据结构,数据结构可以复杂的优先队列,二叉树,图的邻接表,也可以是简单的一维、二维数组,结构体。

比如旅行商问题,当然要考虑,每个城市结点的访问情况,bool visited[n];

原文地址:https://www.cnblogs.com/mtcnn/p/9423915.html