剑指offer笔记(6)
Table of Contents

《剑指Offer》 读书笔记。

第 7 章 两个面试案例

案例1

问下面代码的输出结果:

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  2n2  1
正确答案:n1 是一个溢出的数,n2  0

C++ 不是按照初始化列表中的参数顺序初始化成员变量的,而是按照成员变量在类中的声明顺序。本例中,n1 在 n2 之前声明。

编程题:实现 StrToInt。

class Solution {
public:
    int StrToInt(string str) {

    }
};

要考虑各种边界情况:字符串为空,不是数字,数字范围溢出等等。

提问环节别问工资(尤其是技术面的时候),多问技术相关的内容。

写代码之前考虑所有可能的测试用例。

案例2

介绍项目经历的时候,讲清楚自己负责完成的是哪些部分,遇到过什么困难,是如何解决困难的。

编程题:输入两个树节点,求它们的最低公共祖先。

对细节进行提问:

1. 找从根节点到 node1 的路径,存储在一个数组中
2. 找从根节点到 node2 的路径,存储在一个数组中
3. 遍历两条路径,直到遇到一个不同的节点,则前面的那个为最低公共祖先

时间复杂度 O(log(n)),最坏时间复杂度 O(n);空间复杂度和时间复杂度一样。

提问环节

Related