📅  最后修改于: 2023-12-03 15:39:34.709000             🧑  作者: Mango
本次面试是为微软公司的校外软件工程实习岗位进行的面试,以下是面试的一些情况和经验分享。
首先,面试官会与你进行自我介绍,解释此次实习的具体内容和要求。接下来是编程题目,这部分内容会分为两问,第一问为基础题目,第二问为稍难的扩展问题。考核的核心为程序设计思路和实现能力。
在完成编程部分之后,面试官还会就你的编程思路和实现过程与你进行交流分析。最后,还会就你的项目经验、工作态度、个人发展规划等方面进行询问和评估。
这是一道经典的编程题目——
题目描述
有一块布,上面只有连续的黑色或白色方块,请编写一个程序,计算这块布上所有矩形的最大面积。
举例
见到这个问题,我们可以使用“单调栈”的思路进行实现。
class Solution:
def maximalRectangle(self, matrix) -> int:
"""
:type matrix : List[List[str]]
:rtype : int
"""
if not matrix:
return 0
m=n=len(matrix[0])
height=[0]*n
left=[0]*n
right=[n]*n
maxarea=0
for i in range(m):
cur_left, cur_right=0,n
for j in range(n):
if matrix[i][j]=='1':
height[j]+=1
else:
height[j]=0
for j in range(n):
if matrix[i][j]=='1':
left[j]=max(left[j],cur_left)
else:
left[j]=0
cur_left=j+1
for j in range(n-1,-1,-1):
if matrix[i][j]=='1':
right[j]=min(right[j],cur_right)
else:
right[j]=n
cur_right=j
for j in range(n):
maxarea=max(maxarea,height[j]*(right[j]-left[j]))
return maxarea
需要注意的是,这里写到的程序可能并不是最优解,但它具有很好的代码风格和可读性,符合编程规范。而且它也已经通过了微软的校外软件工程实习面试。