最近微软IDC来我校实习。我一共打了6轮。
目标回合:-
客观回合是在 Cocubes.com 上进行的,有 15 个问题(在我的集合中重复了 1 个问题)。有一个关于“数组中的矩形碰撞”的问题,我不知道。
编码回合:-
有两个编码问题:-
1) 在已排序数组中找到一个元素,该元素在 O(logn) 时间内仅在一个位置循环旋转。
(参考 https://www.geeksforgeeks.org/search-an-element-in-a-sorted-and-pivoted-array/)
2) 在二叉搜索树中找到一个节点的中序后继。
(BST 中存在父指针)。 (参考https://www.geeksforgeeks.org/inorder-successor-in-binary-search-tree/的方法1)
小组面试:-
前 10 分钟,他询问了我们期望技术领域的下一个重大事件是什么。然后他提出了两个问题:-
1)给定一个字符串,你必须检查它是否是一个有效的数字。(数字可以是有符号的,浮点数/整数)。如果是数字返回真,否则返回假。
限制是:-
i) 不允许决策语句(没有 if-else,没有 switch-case)。
ii) 不允许使用三元条件运算符(?:不允许)。
iii) 不允许循环语句(不允许 for/while/do-while)。
(我的解决方案是一个递归实现,返回一个只有一个使用关系运算符和两个全局变量的 return 语句的 bool,一个用于检查它是否是 ‘.’ 的第一次出现,另一个用于检查符号 ‘+’/’- ‘ 是否出现在第一个位置)。
2)Bing希望通过给用户奖励积分来改善用户的体验。设计一种算法来为不同的用户分配奖励积分。
个人面试第一轮:-
1)你只给出包含字符串“(”和“)”中,如果检查的字符串被很好地形成,即,检查是否在括号很好地匹配。
(要么有一个 ‘(‘ 的计数,要么使用堆栈来推送 ‘(‘ 并在遇到 ‘)’ 时弹出)。
2)有一个具有以下原型的机器人类:-
class Bot {
// private data members
public :
bool moveleft(); // The bot moves one block left and returns true.
bool moveright(); // The bot moves one block right and returns true.
bool movebottom(); // The bot moves one block down and returns true.
bool movetop(); // The bot moves one block up and returns true.
bool hasGold(); // returns true if the current position of bot has gold.
};
给你一个机器人和迷宫的尺寸,有墙壁和一些有金的块,检查机器人是否可以到达含有金的块。
(使用递归实现使用 dfs 图遍历,如果当前位置有黄金则返回 true,仅当您无法进一步移动时才返回 false)。
第二轮个人面试:-
1)给你两棵二叉树的根,检查树是否同构。(最初他为一棵树(不是二叉树)设计了这个问题,并给了我两个随机节点而不是根)。
(参考 https://www.geeksforgeeks.org/tree-isomorphism-problem/)
2) 给定一个 n X m 维的数组。您从第 (0,0) 个位置开始。您可以从 (i,j) 移动到 (i + 1,j),(i,j + 1),(i + 1,j + 1)th 个位置。找出从 (0,0)th 到 (i,j)th 位置的路径总数。
(对于所有 i 和 j,dp[i][0] = dp[0][j] = 1,dp[i][j] = dp[i – 1][j – 1] + dp[i][ j – 1] + dp[i – 1][j])。
第三轮个人面试:-
1) 给定一本字典,将字谜组合在一起。
(对字典中的每个字符串进行排序,因为排序后字谜将具有相同的表示形式,使用哈希图来存储字谜组)。
2)他问了与我的项目有关的问题。
谢谢 geeksforgeeks.org。