美团笔试算法岗

选择题好多RNN系列,一个CNN没有,做图像的表示哭了。
问答题感兴趣的可以看看,算是一个智力题,有一个软件有串行的150个模块,有两个检测系统。现在其中一个节点被入侵了,检测系统必须从1开始检测,终点可以自选,如果中间包含入侵节点,返回False并且该模块报废,如果是True则可以重复使用。问怎么设计检测次数最少。
问答题我的思路是,第二个检测系统每次只能检测1个节点,比如终点为50发现没有被入侵,下一次终点必须是51。而第一次可以每隔m个做一次检测,最终算出来m为12或者13,检测次数的期望是14次。不知道正不正确,有大佬有更简单方法不?
编程题第一题:最长重复子序列,应该是力扣原题;
编程题第二题大致意思是:有n个箱子,每个箱子里有一定数量的货物a[i],并且每个箱子的有一定大小的容量b[i],现在要用尽量少的箱子存放所有货物,并且希望移动的货物数量最少,问箱子最少多少个,最少移动多少货物。只A了36%,我的错误实例是a = [6, 5, 1, 3], b = [7, 6, 5, 4],应该是3个箱子移动一次。(错误示例是自己尝试的测试用例)

#笔试题目##美团#
全部评论
第一题不是力扣原题
点赞 回复
分享
发布于 2019-09-11 17:17
第二题正确的思路应该是啥?求指点
点赞 回复
分享
发布于 2019-09-11 17:20
联易融
校招火热招聘中
官网直投
第二题 #include<iostream> #include<vector> #include<algorithm> #include<string> #include<cmath> #include<ctime> #include<random> #define ll long long #define Fori(x) for(int i=0;i<x;i++) #define Forj(x) for(int j=0;j<x;j++) using namespace std; int n; int a[111]; int b[111]; int dp[111][10011]; int main() {  Fori(111)   Forj(10011)    dp[i][j] = -100000000;  dp[0][0] = 0;  scanf("%d",&n);  Fori(n)   scanf("%d",&a[i]);  Fori(n)   scanf("%d",&b[i]);  for(int i=0;i<=n;i++)  {   for(int j=n;j>=1;j--)   {    for(int k=10000;k>=b[i];k--)    {     dp[j][k] = max(dp[j][k],dp[j-1][k-b[i]]+a[i]);    }   }  }  int sum = 0;  int ans = 0;  for(int i=0;i<n;i++) sum+=a[i];  sort(b,b+n);  int tmp = 0;  for(int i=n-1;i>=0;i--)  {   tmp+=b[i];   if(sum<=tmp)   {    ans = n-i;    break;   }  }  cout<<ans<<" ";  int ans2 = 10000000;  for(int i=sum;i<=10000;i++)   ans2 = min(ans2,sum - dp[ans][i]);  cout<<ans2<<endl;  return 0; }
点赞 回复
分享
发布于 2019-09-11 17:22
怎么看错误事例啊? 开放题的题目是确定能搜出来。。所以算的应该不是期望是最坏情况。。。
点赞 回复
分享
发布于 2019-09-11 17:26
我也想知道咋看到的错误实例。。。还是说你猜了一个错误实例出来?
点赞 回复
分享
发布于 2019-09-11 17:28
问答题和经典的两个鸡蛋测在第几层碎一样,有很多种方法,也可以dp
点赞 回复
分享
发布于 2019-09-11 17:53
问答题是两个鸡蛋测楼层的问题,答案是 17好像n(n+1)\2=150
点赞 回复
分享
发布于 2019-09-11 18:00

相关推荐

2 10 评论
分享
牛客网
牛客企业服务