网易2020校招笔试- 大数据开发工程师(正式批)

Posted 爱做梦的鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了网易2020校招笔试- 大数据开发工程师(正式批)相关的知识,希望对你有一定的参考价值。

目录

如果你从本文中学习到丝毫知识,那么请您点点关注、点赞、评论和收藏
大家好,我是爱做梦的鱼,我是东北大学大数据实验班大三的小菜鸡,非常渴望优秀,羡慕优秀的人,个人博客为:爱做梦的鱼https://zihao.blog.csdn.net/,微信公众号、微信视频号为【程序猿干货铺】,qq交流群为:1107710098

本题出处——牛客链接:https://www.nowcoder.com/test/20791044/summary

一、翻倍

时间限制: C/C++ 2秒,其他语言4秒
空间限制: C/C++ 256M,其他语言512M

小易给定你数字 A , B ( A < B ) A,B (A<B) AB(A<B) 和系数 p , q p,q pq。每次操作你可以将 A 变成 A + p A+p A+p 或者 p 将变成 p × q p\\times q p×q 。问至少几次操作使得 B ≤ A B \\leq A BA

输入描述:
第一行数据组数 T T T,对于每组数据,一行四个整数 A , B , p , q A,B,p,q ABpq
1 ≤ A , p , B ≤ 1 0 9 1\\leq A,p,B \\leq10^9 1A,p,B109, 2 ≤ q ≤ 10 2\\leq q \\leq10 2q10, 1 ≤ T ≤ 5 1\\leq T \\leq5 1T5
.
输出描述:
对于每组数据,输出一个数字表示答案

输入例子1:
2
1 5 7 2
3 5 1 2

输出例子1:
1
2
输入例子2:
2
1 15 4 2
12 19 3 2

输出例子2:
3
3

方法一:暴力

import java.util.Scanner;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: 张志浩 Zhang Zhihao
 * @Email: 3382885270@qq.com
 * @Date: 2020/8/7
 * @Time: 15:00
 * @Version: 1.0
 * @Description: Description
 */
public class Doubled 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        for (int i = 0; i < T; i++) 
            System.out.println(count(sc.nextInt(), sc.nextInt(), sc.nextInt(), sc.nextInt()));
        
        sc.close();
    

    public static int count(int A, int B, long p, int q) 
        int res = 1;
        while (A < B) 
            if (A + p >= B) 
                return res;
             else 
                p = p * q;
                res++;
            
        
        /*while (A + p < B) 
            p = p * q;
            res++;
        */
        return res;
    

方法二:递归

import java.util.Scanner;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: 张志浩 Zhang Zhihao
 * @Email: 3382885270@qq.com
 * @Date: 2020/8/7
 * @Time: 16:51
 * @Version: 1.0
 * @Description: Description
 */

public class Doubled2 
    public static void main(String[] args) 
        Scanner in = new Scanner(System.in);
        int t = in.nextInt();
        for (long i = 0; i < t; i++) 
            long a = in.nextLong();
            long b = in.nextLong();
            long p = in.nextLong();
            long q = in.nextLong();
            long nums = getDoubling(a, b, p, q, 0);
            System.out.println(nums);
        

    

    private static long getDoubling(long a, long b, long p, long q, long nums) 
        if (a + p >= b)
            return nums + 1;
        else if (a + p * q >= b)
            return nums + 2;
        else return getDoubling(a, b, p * q * q, q, nums + 2);

    

二、跳柱子

时间限制: C/C++ 2秒,其他语言4秒

空间限制: C/C++ 256M,其他语言512M

小易有 n n n 根柱子,第i根柱子的高度为 h i h_i hi 。一开始小易站在第一根柱子上。小易能从第 i i i 根柱子跳到第 j j j 根柱子,当且仅当且 h j ≤ h i h_j \\leq h_i hjhi 1 ≤ j − i ≤ k 1\\leq j-i \\leq k 1jik 。其中为指定的一个数字。
另外小易拥有一次释放超能力的机会。这个超能力能让小易从柱子 i 跳到任意满足 1 ≤ j − i ≤ k 1\\leq j-i \\leq k 1jik 的柱子 j 而无视柱子高度的限制。
现在小易想知道,小易是否能到达第 n 根柱子。

输入描述:
第一行数据组数 T T T
对于每组数据,第一行数字 n , k n , k n,k ,接下来一行 n n n 个数字表示 h i h_i hi.
1 ≤ n ≤ 1000 1\\leq n \\leq 1000 1n1000 , 1 ≤ h i ≤ 1 0 9 1\\leq h_i \\leq 10^9 1hi109 , 1 ≤ T ≤ 10 1\\leq T \\leq 10 1T10 , 1 ≤ k ≤ n 1\\leq k \\leq n 1kn

输出描述:
对于每组数据,输出YES或NO

输入例子1:
1
5 3
6 2 4 3 8

输出例子1:
YES
输入例子2:
1
5 2
1 8 2 3 4

输出例子2:
NO

方法一:暴力,寻找能到达的最高柱子,方便我下次跳

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: 张志浩 Zhang Zhihao
 * @Email: 3382885270@qq.com
 * @Date: 2020/8/8
 * @Time: 10:28
 * @Version: 1.0
 * @Description: Description
 */

import java.util.Scanner;

public class JumpPillar5_Violence 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        int T = sc.nextInt();
        int n = 0, k = 0;
        for (int i = 0; i < T; i++) 
            n = sc.nextInt();
            k = sc.nextInt();
            int[] nums = new int[n];
            for (int j = 0; j < n; j++)
                nums[j] = sc.nextInt();
            System.out.println(solution(n, k, nums));
        
    

    public static String solution(int n, int k, int[] nums) 
        int big = 1;
        int index = 0;
        while (index < nums.length - 1) 
            int tmp = index;
            int max = 0, max_index = index;
            for (int j = index + 1; j < index + 1 + k && j < nums.length; j++) 
                if (nums[j] < nums[index]) 
                    max_index = (max > nums[j]) ? max_index : j;
                    max = Math.max(nums[j], max);
                
            
            index = max_index;
            if (tmp == index && big > 0) 
                big--;
                max = 0;
                max_index = index;
                for (int j = index + 1; j < index + 1 + k && j < nums.length; j++) 
                    max_index = (max > nums[j]) ? max_index : j;
                    max = Math.max(nums[j], max);
                
                index = max_index;
             else if (tmp == index && big <= 0)
                return "NO";
        
        return "YES";
    

方法二:动态规划dp

/**
 * Created by IntelliJ IDEA.
 *
 * @Author: 张志浩 Zhang Zhihao
 * @Email: 3382885270@qq.com
 * @Date: 2020/8/8
 * @Time: 9:54
 * @Version: 1.0
 * @Description: Description
 */

import java.util.Scanner;

public class JumpPillar3 
    public static void main(String[] args) 

        Scanner sc = new Scanner(System.in);

        int m = sc.nextInt();

        while (m-- > 0) 
            int n = sc.nextInt();
            int k = sc.nextInt();

            int[] a = new int[n];
            for (int i = 0; i < n; i++) 
                a[i] = sc.nextInt();
            

            int[] dp = new int[n];
            dp[0] = 1;

            for (int i = 0; i < n; i++) 
                if (dp[i] > 0) 
                    for (int j = i + 1; j <= i + k && j < n; j++) 
                        if (a[i] >= a[j]) 
                            if (dp[j] == 0 || dp[j] > dp[i])
                                dp[j] = dp[i];
                         else if (dp[i] == 1 && dp[j] == 0)
                            dp[j] = 2;
                    
                
            

            System.out.println(dp[n - 1] > 0 ? "YES" : "NO");
        

    


三、人数统计

时间限制: C/C++ 2秒,其他语言4秒

空间限制: C/C++ 256M,其他语言512M

小易的公司一共有 n 名员工, 第个人每个月的薪酬是 x i x_i xi 万元。
现在小易的老板向小易提了次询问, 每次询问老板都会给出一个整数 k 小易要快速回答老板工资等于 k 的员工的数量。

输入描述:
第一行,两个空格间隔的整数 n 和 m ,表示人数和提问的次数
第二行,n 个用空格间隔的整数 x i x_i xi ,表示每名员工的薪酬
接下来有 m

以上是关于网易2020校招笔试- 大数据开发工程师(正式批)的主要内容,如果未能解决你的问题,请参考以下文章

最后一周!4000+HC免笔试!字节跳动2022校招研发提前批倒计时

米哈游2023秋季招聘正式开始~提前批有机会免笔试!

2017年9月秋招记录--持续更新

数据挖掘百度机器学习-数据挖掘-自然语言处理工程师 2023届校招笔试详解

题解百度2020校招Web前端工程师笔试卷(第三批):单选题多选题

2021校招 科大讯飞提前批