微软面试经历 | Set 90(Bing Team 中的软件工程师角色)
我最近参加了微软必应团队的软件工程师面试。
第1轮:
它的初始筛选轮。它是通过Skype发生的。
1. 给定 n*n 矩阵,每个单元格中有一些元素。如果任何单元格中有“0”,那么我们必须将相应的行和列设置为“0”
时间复杂度:O(n*n) 空间复杂度:O(1)
2. 给定一个大小为 n 的元素数组。您应该找到重复超过 n/2 次的数字
时间复杂度:O(n)
放映一轮后,他们让我来参加 4 轮 F2F 轮次。我访问了 Microsoft IDC Hyderabad。
第 2 轮:
1.给定排序的数字数组和一个总和。我们必须找到总和等于给定总和的任何两个数字。
时间复杂度:O(n)
2. 给定具有父指针和两个节点的二叉树。查找给定二叉树中给定两个节点的 LCA
struct TreeNode
{
int data;
TreeNode *left, *right, *parent;
};
每个节点的父指针指向它的父节点。根节点的父指针指向 NULL
时间复杂度:O(logn)
第三轮:
1. 给定两个链表。找到这两个链表的交点
2.它基于二叉树。我忘了问题🙂
3. 智能手机搜索功能设计探讨
第四轮:
1. 给定一个链表,其中每个节点的随机指针指向给定链表中的某个随机数。克隆链表
struct ListNode
{
int data;
ListNode *next, *random;
};
2. 设计和实现DNS Cache。
要求:
缓存的大小必须是固定的,这将由想要使用此缓存的用户决定。
如果该条目在缓存中不可用,则它应该调用服务器以获取 IP 地址的详细信息并将其存储在缓存中。
第五轮:
1. 以螺旋顺序打印给定的矩阵
2. 我忘记了问题。它与数组有关
3. 设计讨论脸书上的热门趋势功能。