网易游戏开发笔试题

(1)AC
#include<iostream>
#include<set>
#include<vector>
using namespace std;
int getCount(long& num){
    int cnt = 0;
    while(num){
        if(num&1)cnt++;
        num >>= 1;
    }
    return cnt;
}
int main(){
    int T;
    while(cin>>T){
        vector<int> res;
        for(int j = 0; j < T; j++){
            int n;
            cin>>n;
            set<int> ans;
            for(int i = 0; i < n; i++){
                long temp;
                cin>>temp;
                ans.insert(getCount(temp));
            }
            res.push_back(ans.size());
        }
        for(auto x : res)cout << x << endl; 
    }
    return 0;
}
(2)AC(直接写方法了)
int func(int &m, int &t, int &m1, int &t1, int &m2, int &t2){
    int sum = 0, cur = 0;
    bool jishui = true, paishui = true;
    int tm = m, tt = t, tm1 = m1, tt1 = t1, tm2 = m2, tt2 = t2;
    while(cur < tt){
        if(jishui&&paishui){
            sum += tm1 - tm2;
            if(sum >= tm) sum = tm;
            else if(sum <= 0) sum = 0;
        }else if(!jishui && paishui){
            sum -= tm2;
            if( sum <= 0)sum = 0;
        }else if(jishui && !paishui){
            sum += tm1;
            if( sum >= tm)sum = tm;
        }
        tt1--;
        if(tt1==0){
            if(jishui)jishui = false;
            else jishui = true;
            tt1 = t1;
        }
        tt2--;
        if(tt2==0){
            if(paishui)paishui = false;
            else paishui = true;
            tt2 = t2;
        }
        cur ++;
    }
    return sum;
}
(3)AC
int func(string &s){
    vector<int> indexs;
    int len = s.length();
    for(int i = 0; i < len; i++)if(s[i] != 'N')indexs.push_back(i);
    if(indexs.size() <= 2)return len;
    int maxx = 0;
    for(int i = 0; i < indexs.size() - 1; i++){
        int l = indexs[i] - 1, r = indexs[i + 1] + 1;
        while(l>=0 && s[l] == 'N')l--;
        while(r < len && s[r] == 'N')r++;
        l++, r--;
        maxx = max(maxx, r - l + 1);
    }
    return maxx;
}
(4)40%,浪费一个小时时间,看错题目,后面匆匆写了,时间复杂度没过,只有4分钟了。。。。。。
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int T;
    cin >> T;
    vector<long> a(T, -1);
    for(int i = 0; i < T; i++)
        cin >> a[i];
    int q;
    cin >> q;
    vector<int> res;
    for(int i = 0; i < q; i++){
        vector<int> temp(a.begin(), a.end());
        long qq;
        cin >> qq;
        for(int j = 0; j < T; j++)
            if(qq >= temp[j])temp[j] = -1;
        int cnt = 0, index = 0;
        while(index < T){
            if(temp[index]!=-1){
                cnt++;
                while(index < T && temp[index]!=-1)index++;
            }
            index++;
        }
        res.push_back(cnt);
    }
    for(auto x : res)cout << x << endl;
    return 0;
}
刚刚研究了一下这题,感觉在多了复制和循环,一旦T和q特别大的时候,就很耗时,作出下面的改进,不复制不赋值,时间复杂度在O(q*T),这样在时间上肯定是不会有问题的,如果有,可能也是边界条件,也就是第一个数和最后一个数可能做一下特殊处理,其实改动不大,只是看错题意,浪费了好多时间!!!
#include<iostream>
#include<vector>
using namespace std;
int main(){
    int T;
    cin >> T;
    vector<long> a(T, -1);
    for(int i = 0; i < T; i++)
        cin >> a[i];
    int q;
    cin >> q;
    vector<int> res;
    for(int i = 0; i < q; i++){
        long qq;
        cin >> qq;
        int cnt = 0, index = 0;
        while(index < T){
            if(a[index] > qq){
                cnt++;
                while(index < T && a[index] > qq)index++;
                index--;
            }
            index++;
        }
        res.push_back(cnt);
    }
    for(auto x : res)cout << x << endl;
    return 0;





#笔试题目#
全部评论

相关推荐

点赞 评论 收藏
分享
稚名不带撇:感觉学院本就已经废了,不是能不能进公司的问题了,是根本就没有啥面试,boss沟通了一千多,回我消息的才89,面试的才二十几个,但基本上都是小公司点击就送,唯一一次有1000+的公司面试,面的很好全回答出来了,项目这块个人感觉也说的不错,甚至面试官最后还直接给我介绍公司业务和看公司系统这些,介绍的也比较详细,说了40分钟到一个小时左右,说怕给我offer我不喜欢这种模式啥啥啥的,鼠鼠以为应该稳了,但是最后还是挂了,我问我们老师他说这种情况大概率是学历比你高的出现了,虽然可能问题没有全回答出来,但是学历把你爆了
秋招,不懂就问
点赞 评论 收藏
分享
评论
点赞
10
分享

创作者周榜

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