网易互娱人工智能第一批机器学习算法工程师3道编程

1. T个测试用例。用例中,给定 n 个非负整数,按每个数的二进制表示中‘1‘的个数进行分组,求这 n 个数分成几组?

#include <iostream>
#include <unordered_set>
using namespace std;

int func(int x){
    int c = 0;
    while(x){
        c++;
        x &= x - 1;
    }
    return c;
}

int main()
{
    int T, n;
    cin >> T;
    
    for(int t = 1; t <= T; ++t){
        cin >> n;
        unordered_set<int> s;
        
        for(int i = 0; i < n; ++i){
            int x;
            cin >> x;
            s.insert(func(x));
        }
        
        cout << s.size() << endl;
        
    }
    
    return 0;
}
2. T 个测试用例。每个测试用例,输入 m, t, m1, t1, m2, t2 六个整数。m 是游泳池容量,进水管每分钟进水量为 m1,出水管每分钟出水量为 m2。
进水管每隔 t1 分钟切换状态(“进水”、“关闭”互相切换),出水管每隔 t2 分钟切换一次状态(“出水”、“关闭”互相切换)。初始时,进水管、出水管都是开启状态。
求 t 时刻游泳池里的水量。
游泳池水量不会溢出,水量也不会为负。

#include <iostream>
using namespace std;

int main()
{
    int T, m, m1, m2, t1, t2, t;
    cin >> T;

    for(int i = 1; i <= T; ++i) {
        cin >> m >> t >> m1 >> t1 >> m2 >> t2;

        int volume = 0;

        for(int j = 1; j <= t; ++j) {
            int t11 = j / t1 * t1;

            // 1: in, 0 stop
            bool state1 =
                (j / t1 % 2 && j == t11) || (!(j / t1 % 2) && j != t11);

            int t22 = j / t2 * t2;

            // 1: out, 0 stop
            bool state2 =
                (j / t2 % 2 && j == t22) || (!(j / t2 % 2) && j != t22);

            if(state1 && state2) {
                volume += m1 - m2;
            } else if(state1) {
                volume += m1;
            } else if(state2) {
                volume -= m2;
            }

            if(volume > m) {
                volume = m;
            } else if(volume < 0) {
                volume = 0;
            }
        }

        cout << volume << endl;
    }

    return 0;
}

3. T个测试用例。每个测试用例,给定一个全部是大写字母组成的字符串,允许你至多可将两个字符改成字符'N',求更改后,由连续‘N’组成的串的最长长度。
#include <iostream>
#include <string>
using namespace std;

int func(string s)
{
    int s_size = s.size();

    int count = 0, begin = 0, end = 0, len = 0;

    while(end < s_size) {
        if(s[end++] != 'N')
            count++;
        while(count > 2) {
            if(s[begin++] != 'N') {
                count--;
            }
        }
        len = max(len, end - begin);
    }

    return len;
}

int main()
{
    int T;
    string s;
    cin >> T;

    for(int i = 1; i <= T; ++i) {
        cin >> s;
        cout << func(s) << endl;
    }

    return 0;
}



#网易互娱##机器学习##笔试题目#
全部评论
膜拜
点赞 回复 分享
发布于 2019-08-11 17:06
为什么算法岗还比我开发岗少一题啊
点赞 回复 分享
发布于 2019-08-11 17:08
请问第三题思路是怎么样的?
点赞 回复 分享
发布于 2019-08-11 17:09
楼主投的什么岗位?
点赞 回复 分享
发布于 2019-08-11 18:04
这是什么意思,能解释一下吗?  int t11 = j / t1 * t1;               // 1: in, 0 stop             bool state1 =                 (j / t1 % 2 && j == t11) || (!(j / t1 % 2) && j != t11);  
点赞 回复 分享
发布于 2019-08-11 18:40
双指针是begin和end吗,为什么两个初始值都是0呢
点赞 回复 分享
发布于 2019-08-13 10:39

相关推荐

01-02 21:17
已编辑
西安理工大学 后端
程序员小白条:项目不太重要,你的优势的算法竞赛,然后多背相关的八股文,项目可以不作为重点考虑,面试可能就简单带过项目就行了,你可以直接写简历,背项目相关的八股文就行,也不用自己做,时间紧张的情况下,性价比最高
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
1
26
分享

创作者周榜

更多
牛客网
牛客企业服务