2022-09-22-微软二面-45min
https://www.nowcoder.com/discuss/1060275
自我介绍,讲研二的论文,对研一做的高可靠并行匹配模型感兴趣问了一下,二十几分钟吧。
题目是个bfs扩展步数。空位置为0,好橘子为1,坏橘子为2,每一步坏橘子往4个方向上传播把好的变坏掉的。
说没什么错,能不能优化一下,我说是Omn了,
后说时间空间都做得不错,这个next队列能不能不用,于是就有了下面的注释。
说行没什么了,没要反问了。。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
#define _for(i,a,b) for(int i=a;i<b;i++)
inline bool valid(int i, int j, int n, int m){
return 0<=i&&i<n&&0<=j&&j<m;
}
pair<int,int> stableStepNum(vector<vector<int>> a){
int ans=0, n=a.size(),m=a[0].size(),ngood=0;
queue<pair<int,int>> q;
_for(i,0,n){
_for(j,0,m){
if(a[i][j]==2){
q.push({i,j});
// a[i][j]=-1; // ?
}else if(a[i][j]==1)
ngood++;
}
}
int dir[5]={0,1,0,-1,0};
while(!q.empty()){
queue<pair<int,int>> next;
// int nq=q.size();
// _for(k,0,nq){
// q.push({});
// }
while(!q.empty()){
auto t = q.front();
q.pop();
for(int i=0;i<4;i++){
int nx=t.first+dir[i],ny=t.second+dir[i+1];
if(valid(nx,ny,n,m)&&a[nx][ny]==1){
next.push({nx,ny});
a[nx][ny]=2;
ngood--;
}
}
}
ans++;
q=next;
}
return {ans, ngood};
}
int main() {
// you can write to stdout for debugging purposes, e.g.
std::cout << "This is a debug message" << std::endl;
return 0;
}
#微软##微软苏州##面试##23届秋招笔面经##微软面经#
查看11道真题和解析
