天天看点

爱奇艺2018春招-大数据方向笔试分析

作为一名普通的大三学生,第一次做笔试,所以想发表一些对爱奇艺笔试的看法**

单选题(45分)

因为是大数据方向,所以单选题考了很多大数据结构的题目,如mapreduce,Hadoopde等,作为一个只上课大数据课的学生来说,我真的对这些一点不知道,还好考试前在牛客刷了点其他公司大数据方向的题,有点印象感觉瞎蒙也能对几道,除此之外,还考了栈,排序,四次挥手等简单的基础知识,我的基础知识还算比较牢固,不至于太差。

编程题(60分)

编程题总共有2道,都是很基础的数学题目,并没有需要用到特殊结构的题

编程题1:

1.给予一个数字n(n≤1000000),然后输入n个数据(1≤数据≤1000000),寻找N个数中唯一一个不同的数字,返回该数字的位置,

思路:一开始想设个1000000大小的数组,然后发现数组太大了… ̄□ ̄||

突然就想到可以在输入数据的时候就进行比较,为了发现不同的两个数字中哪个是正常的数字,所以需要读入第三个数据,需要的数组大小为3,方便起见我就直接设为10了。

基本思路是当 i != i-1时,读入下一个元素并记录下一个 i 到sign中,然后分情况讨论输出 i 或 i -1 或 i - 2,其中 i 的情况是不同的数位于末尾,i -1的情况读入的第三个数与第二个数不同,i - 2的情况是读入的第三个数与第二个数相同

#include <iostream>
using namespace std;

int main()
{
    int n;
    cin >> n;
    int w[];
    int sign = , flag = ;
    for (int i = ; i <= n; i++)
    {
        cin >> w[i%3];
        sign = i;
        if (flag == ) break;
        if ((w[i%3] != w[(i-)%3])&(i>)) flag=;
    }
    if ((sign == n)&(w[sign % ] != w[(sign - ) % ]))
    {
        cout << sign;
    }
    else if (w[sign%3] == w[(sign-)%3])
    {
        cout << sign-;
    }
    else cout << sign - ;
}
           

编程题2

有三个整数X,Y,Z,要求进行若干次操作使X,Y,Z相等,操作有两种

1.从X,Y,Z中选择两个数都加1

2.从X,Y,Z中选择一个数加2

求最少需要多少次操作

思路:我把三个数按从大到小的排序,方便后来的计算,a是最大的数,b和c有两种情况,相差为奇数时可以通过(b-c)/2次操作变成b,b-1,然后只要a-b+2次操作就能得到相等,相差为偶数时通过(b-c)/2次操作变成b,b,然后再a-b次操作就相等了

#include <iostream>
using namespace std;
void change(int *a, int *b)
{
    int m;
    if (*a < *b)
    {
        m = *a;
        *a = *b;
        *b = m;
    }
}
int main()
{
    int a, b, c;
    cin >> a >> b >> c;
    change(&a, &b);
    change(&a, &c);
    change(&b, &c);
    int i = ;
    if (b == c)
    {
        cout << a - b;
    }
    else if ((b - c)%2== )
    {
        cout << a - b + +(b-c)/;
    }
    else if ((b - c) %  == )
    {
        cout << (b - c) /  + a - b;
    }
    return ;
}
           

大三狗第一次做笔试,选择题大半都不会,编程走了大半天弯路才回来,不知道两个AC能不能进面试 ̄□ ̄||

it

继续阅读