网易开发岗笔试(8月11日)

渣渣没怎么刷leetcode,只做出来了1和3,第四题40%,第二题不会,求大佬给个思路
#网易##笔试题目##秋招#
全部评论
老哥我是做出来了第一题第二题 第四题也是不全对 第三题的思路一直找不到 直到碰上了老哥 在这里感激不尽!!! 顺便问一下 这次开发岗笔试是那一批的?我在网易校招官网上没看到相应的投递信息啊 这样怎么看招聘记录啊?
点赞 回复 分享
发布于 2019-08-15 16:48
原来第二题就是一分钟一分钟的枚举,还是经验少了,想到了却没写出来 附上四道题代码,欢迎交流 第一题: 其实用位运算更好些,但是懒得搞了,题目说是非负数  #include<iostream> #include<cstring> using namespace std; int countx(int x){ int cnt=0; while(x){ if(x%2==1) cnt++; x=x/2; } return cnt; } int main(){ int T,N; cin>>T; for(int i=1;i<=T;i++) { cin>>N; int ans[35]={0}; int x,temp; for(int j=1;j<=N;j++) { cin>>x; temp=countx(x); ans[temp]++; } int cnt=0; for(int k=0;k<32;k++) { if(ans[k]) cnt++; } cout<<cnt<<endl; }  return 0; } 第二题: 一分钟维护一次,每次查询进出口状态,分四类情况即可 #include<iostream> #include<algorithm> #include<queue> #include<cstring> using namespace std; bool check(int x,int t){ x=x-(x/(2*t))*2*t; if(x>0 && x<=t) return 1; else return 0; } int main(){ int T; cin>>T; int m,t,m1,t1,m2,t2; while(T--){ int sum=0; cin>>m>>t>>m1>>t1>>m2>>t2; for(int i=1;i<=t;i++) { bool p1=check(i,t1); bool p2=check(i,t2); //if(p1==0 && p2==0) continue; if(p1==1 && p2==1){ sum+=m1-m2; if(sum>m) sum=m; if(sum<0) sum=0; } if(p1==1 && p2==0) { sum+=m1; if(sum>m) sum=m; } if(p1==0 && p2==1) { sum-=m2; if(sum<0) sum=0; } //cout<<i<<" "<<p1<<" "<<p2<<" "<<sum<<endl; } cout<<sum<<endl; } return 0; } 第三题:滑动窗口,双指针,维持窗口内只有两个非N字符即可(贪心:能换一个N肯定会换,所以肯定是两次,不会是1次或0次),每次窗口最大时即为一个可能的解,维护ans即可 #include<iostream> #include<cstring> using namespace std; int main(){ int T; cin>>T; string s; while(T--) { cin>>s; int len=s.size(); int flag=2,i=0,j=0,ans=0; while(j<len){ if(s[j]=='N') j++; else{ if(flag>0) {flag--;j++;} else { ans = max(ans,j-i); while(flag==0) { if(s[i]=='N') i++; else  {i++;flag++;break;} } }  } } ans=max(ans,j-i); cout<<ans<<endl; } return 0; } 第四题: 只做了40%,感觉要维护一个数组,将O(n*q)变成O(n+q),稍后看完大佬的再补充,吃饭去了 #include<iostream> #include<cstring> using namespace std; int main(){ int n; cin>>n; int a[n]; int mina=1<<30,maxa=-1; for(int i=0;i<n;i++)  { cin>>a[i]; mina=min(mina,a[i]); maxa=max(maxa,a[i]); } int q,h; cin>>q; while(q--){ cin>>h; if(h>=maxa) cout<<0<<endl; else if(h<mina) cout<<1<<endl;  else { int cnt=0; for(int i=0;i<n;i++) { if(a[i]>h){ if(i==0 || i>0&&a[i-1]<=h) cnt++; } } cout<<cnt<<endl; } } return 0; }
点赞 回复 分享
发布于 2019-08-11 18:17

相关推荐

秋盈丶:后续:我在宿舍群里和大学同学分享了这事儿,我好兄弟气不过把他挂到某脉上了,10w+阅读量几百条评论,直接干成精品贴子,爽
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
3
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务