微软 IDC 面试经历
测试:
- 查找字符串中的第一个非重复字符。
输入:“aabcbd”
输出:c - K-反向链表
输入:1 2 3 4 5 -1 k = 3
输出:3 2 1 5 4 - 在给定整数范围内切割短二叉搜索树。
输入:7 5 10 4 6 8 -1 2 -1 -1 -1 -1 9 1 3 -1 -1 -1 -1 -1 -1(电平指令输入)
下限 = 4 上限 = 8
输出:
7:5、8
5:4、6
8:-1、9
4:-1,-1
6:-1,-1
9:-1,-1
大约 200-300 人参加了这一轮比赛,其中 80 人成功通过。
团体飞轮:
- 从给定的输入字符串中删除字符“c”并将其替换为双字符“**”
输入:“钙”
输出:**al**i** - 给定一棵二叉树,其结构如下
Class BSTspecial{ public: BSTspecial* parent = NULL; BSTspecial* left = NULL; BSTspecial* right = NULL; int data; BSTspecial(int data){ this->data = data; } };
给定一个节点(注意它可以是树的任何一个节点,无论它是否是根节点),如果有的话,您需要找到它的直接右兄弟/表亲,如果不存在则返回 NULL。
输入:
1 2 3 4 5 -1 6 -1 -1 -1 -1 -1 -1(电平指令输入)
对于节点“5”,答案是“6”
对于节点“4”,答案是“5”
对于节点 '6' 的答案是 -1
对于节点 '1' 的答案是 -1
在 80 人中,有 14 人入围面试。
面试:
第1轮:
- 你对时间复杂度的理解是什么?您在小组飞行中提出的问题的时间复杂度是多少?
- 给你 n 个字符串和一个字符串连接函数,它接受两个参数(两个字符串),它的时间复杂度是两个字符串长度之和。
如果 s1 是 k 个单位长,s2 是 l 个单位长 TC = O(k + l)现在,您需要生成一个算法,以便用最少的时间连接 n 个字符串。
字符串:s1、s2、s3、s4、……………………………………、sn。
长度:l1,l2,l3,l4,……………………………….,ln。
提示:O(log(n)*(l1 + l2 + l3 + ........ + ln)) 可能不是最好的方法,这只适用于长度几乎相等的字符串。
- 查找给定的链表是否为回文。
在 O(n) 中没有额外的空间并且没有破坏任何链接。注意:递归的堆栈空间将被忽略。
第二轮:
- 从给定的树返回一个数据结构,使得每个节点的所有子节点都指向它们各自的父节点,根节点指向 NULL。
讨论该方法的时间复杂度。
然后我被要求改进它。
由于深夜,第 3 轮和 HR 被打了一顿,我们只有 4 人,但我被要求离开。