《剑指Offer》 读书笔记。
问下面代码的输出结果:
class A { public: A() : n2(0), n1(n2 + 2) {} void print() { cout << "n1: " << n1 << endl << "n2: " << n2 << endl; } private: int n1; int n2; }; int main() { A a; a.print(); system("pause"); return 0; }
错误答案:n1 是 2,n2 是 1 正确答案:n1 是一个溢出的数,n2 是 0
C++ 不是按照初始化列表中的参数顺序初始化成员变量的,而是按照成员变量在类中的声明顺序。本例中,n1 在 n2 之前声明。
编程题:实现 StrToInt。
class Solution { public: int StrToInt(string str) { } };
要考虑各种边界情况:字符串为空,不是数字,数字范围溢出等等。
提问环节别问工资(尤其是技术面的时候),多问技术相关的内容。
写代码之前考虑所有可能的测试用例。
介绍项目经历的时候,讲清楚自己负责完成的是哪些部分,遇到过什么困难,是如何解决困难的。
编程题:输入两个树节点,求它们的最低公共祖先。
对细节进行提问:
1. 找从根节点到 node1 的路径,存储在一个数组中 2. 找从根节点到 node2 的路径,存储在一个数组中 3. 遍历两条路径,直到遇到一个不同的节点,则前面的那个为最低公共祖先 时间复杂度 O(log(n)),最坏时间复杂度 O(n);空间复杂度和时间复杂度一样。
提问环节