OXO部门下的:Forms和Excel API两个组
既有开发也有算法,部门都会做,不特别区分
2面技术面+一面Manager面试
实习期3个月后有转正面试
这是我最轻松的一次面试,面试小哥叫wu tao,人非常Nice,有时候会提醒你思考哪些方面。关键是问的问题我基本都答出来了。明天就会安排二面。
第一面
一:项目
开始面试官先介绍了一下自己,我再自我介绍,然后问项目经验
开始25分钟左右都在问项目,把简历上的项目都问了一下,都会了解你做了一些什么以及遇到问题怎么解决等。
二:算法和设计
然后就是算法题加设计题。
第一题:字符串转float 剑指offer上有
float stringToFloat(string str)
{
}
Valid cases:
1. "100.2"
2. "-100"
3. "0.003"
4. "0.0"
5. "+100"
Invalid cases
1. 不是+-数字小数点
2. 小数点有多个
3. 小数点前后都有数字
4. +- 只能出现一次并且在首位
5. 空串和空格
输出: +- 数字 小数点 数字
def stringToFloat(strr):
dot = -1
for i in range(len(strr)):
if strr[i] == '.':
dot = i
break
front = 0.0
count = 1
for i in range(dot-1,-1,-1):
front += int(strr[i]) * count
count *= 10
if dot == -1:
return front
back = 0.0
count = 0.1
for i in range(dot+1, len(strr)):
back += int(strr[i]) * count
count *= 0.1
return front + back
第二题:链表插入与删除
1->2->3 4
->3.next->4
第三题:扑克牌排序
Hongtao 1-13
Heitao 1-13
Fangbian 1-13
Meihua 1-13
dict[hongtao1] = 1 sort()
1 5 9 2 13 51....
table[1] = 1
hash表:table = [0] * 52
设计题:五子棋盘
用二维表表示,里面的元素可以用int和char来表示,但是char更省空间
第二面:只面了一道算法题
面试官是一个女生: Jiping Shi
上来直接做算法题:1044. Longest Duplicate Substring
输入字符串,找最长连续出现的子字符串
在所有出现多次的子串中(不重叠),找出最长的那个。
abccccddeee
i j
abc
eeeeeee
eee
adeeeee
abcabcefefef
abceeeeeeeeabcabc
abc ef
# 这一个
def longsubString(strr):
if not strr: return ""
count = collections.defaultdict(list)
for i in range(len(strr)):
count[strr[i]].append(i)
# eeeeeeeee
res = ""
maxLen = 0
for i in range(len(strr)):
lenij = 0
for j in range(len(strr)):
if strr[i] == strr[j]:
lenij += 1
else:
if lenij > maxLen:
res = strr[i:(i+j)/2]
maxLen = lenij//2
if lenij > maxLen:
res = strr[i:j]
maxLen = lenij
lenij = 0
# abcabc
for i in range(len(strr)): # i = 0
for j in count[strr[i]]: # j = 3
if i == j and i > j: continue # 这个地方可以优化
windowi, windowj = i, j
lenij = 0
while windowi < j and windowi < len(strr) and windowj < len(strr): #
if strr[windowi] == strr[windowj]:
windowi += 1
windowj += 1
lenij += 1
else:
if lenij > manLen:
res = strr[i:windowi]
maxLen = lenij
if lenij > manLen:
res = strr[i:windowi]
maxLen = lenij
return res
三面:
dixie@microsoft.com
三面:介绍项目,最大的困难是什么?
写完一定得自己测样例,自己想几个测试样例测一测啊!
Question 1: Given an Excel column index, convert to integer. e.g. AA -> 27,反过来也做。
Question 2: Longest ZigZag path in a b-tree
leetcode 1372. Longest ZigZag Path in a Binary Tree
def invert(strr):
if not strr: return 0
mapp = collections.defaultdict(int)
for i in range(len(strr)):
mapp[strr[i]] = ord(strr[i]) - ord('A') + 1
count = 1
res = 0
for i in range(len(strr)-1, -1,-1):
res += mapp[strr[i]] * count
count *= 26
return res
def invert2(num):
if num <= 0: return ""
res = ""
mapp = collections.defaultdict()
for i in range(26): # 27
mapp[i] = ch(ord('A') + i)
while num > 0:
res += mapp[num%26-1]
num /= 26
return res[::-1]
leetcode 1372. Longest ZigZag Path in a Binary Tree
O(NlogN)的时间复杂度不是最优解啊!完蛋了,面试没做出来!
class Solution(object):
def longestZigZag(self, root):
"""
:type root: TreeNode
:rtype: int
"""
self.res = float('-inf')
def traverse(root, idx):
if not root: return 0
if idx % 2 == 0:
return traverse(root.right, idx+1) + 1
else:
return traverse(root.left, idx+1) + 1
def preOrder(root):
if not root: return
depth = max(traverse(root, 0), traverse(root, 1))
self.res = max(self.res, depth)
preOrder(root.left)
preOrder(root.right)
preOrder(root)
return self.res - 1
最优解:时间复杂度为O(N)啊!
class Solution:
def longestZigZag(self, root: TreeNode) -> int:
def zigzag(node: TreeNode) -> tuple:
if not node: return 0, 0
_, lr = zigzag(node.left)
rl, _ = zigzag(node.right)
self.max_path = max(self.max_path, lr + 1, rl + 1)
return lr + 1, rl + 1
self.max_path = 0
zigzag(root)
return self.max_path - 1
准备
自我介绍是英文
三面有:聊项目 难点
求数学期望
微软面试算法题总结:
第一题是不能调用库写十进制和十六进制转换。
第二题是判断两个矩阵是否重叠,如果重叠返回重叠面积。
836. Rectangle Overlap 223. Rectangle Area
第三题是一个贪心算法的会议问题,加了一点难度,不是当天调度,可能是一周以内,不过原理差不多,就是跨天的问题处理。
1.树结构的序列化与反序列化
2. 最长公共子序列
多个链表排序和多个数组排序的思路相似
拓扑排序(O(N^2)),需要邻接表,以及记录入度个数
单调栈:三面算法题:一个数组,数组的值代表高度,问可以积下雨水的量。
Leetcode 44. Wildcard Matching(相似题:10. Regular Expression Matching)
最近公共祖先的变种
1375. Bulb Switcher III (我都没印象我做过这道题)
LeetCode 22. Generate Parentheses
[Jobdu] 题目1337:寻找最长合法括号序列
表达式求值(中缀表达式转化为后缀表达式)
Leetcode 155 min stack
如何判断两个链表是不是有交点
Leetcode 79 Word Search
拓扑排序: 课程排序
最长递增子序列
BST转双向链表
最长递增子序列