全部评论
老哥我是做出来了第一题第二题 第四题也是不全对 第三题的思路一直找不到 直到碰上了老哥 在这里感激不尽!!! 顺便问一下 这次开发岗笔试是那一批的?我在网易校招官网上没看到相应的投递信息啊 这样怎么看招聘记录啊?
原来第二题就是一分钟一分钟的枚举,还是经验少了,想到了却没写出来 附上四道题代码,欢迎交流 第一题: 其实用位运算更好些,但是懒得搞了,题目说是非负数 #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;
}
相关推荐
点赞 评论 收藏
分享
04-28 10:29
门头沟学院 前端工程师 点赞 评论 收藏
分享
05-21 00:34
华中科技大学 Java 点赞 评论 收藏
分享