第一轮
研究生项目介绍
算法题1
七阶斐波那契数列。每个数字是它前面7个数字的和。给出前7个数字,输出第n个数字。
现在脑子懵了我也不记得怎么一步步优化了,反正貌似是把O(7n)降到了O(2n)嗯。。
算法题2
计算两个字符串之间的编辑距离,也就是一个字符串经过几次变化(增加、删除或者改变字母)
动态规划。
第二轮
系统设计
有10个G的URL在10个机器上,每个机器上1G,统计每个URL出现的次数。
把每个URL hash映射到同一个目录/文件下,然后对每个目录/文件合并。
算法题
把一个正方形矩阵逆时针旋转90度
先写了一个空间复杂度比较高的,后来要求原地做,然后有各种边角条件。首先找出坐标变换公式,然后要注意坐标大于n/2时的特殊处理。
第三轮
项目详细介绍
算法题
一个二叉树按层遍历,奇数层从左到右遍历,偶数层从右到左遍历,输出结果。
很简单,两个栈来搞
中间结果开始是存在了内存里,然后后来被问到了数据量很大时怎么办,于是直接输出到了文件里=。=
总结,感觉微软整体面试题不难,但是对优化要求很高,会要求你时间、空间都到最优,还会问一些很实际的比如很大数据量的时候怎么处理这种偏系统设计(大概是属于这个类吧)的题目。
补充。。
后来过了一两周去面了第四面(AA面)
前半个小时聊项目和实习经历,后面一道算法题。。前一天跑着办开会批件手续中暑了。。于是当天成功犯傻逼代码没写出来。。
题目:输入一个中文字符串数字(没有负数,规范化表示),输出它的int表示形式(数据量可以自己规定,但是要考虑特殊情况的话规定到亿比较好)
样例:输入:一百二十五 输出:125
思路:递归来解(先按['亿', '万', ..., '十']来split,然后递归搞一搞~),同理递归可以解那么栈也可以解这个题~