荣耀笔试机试 20220825 通用软开

2小时3题,共600分,感觉方法都有点绕2333不过都通过了

第一题 大小端字节流解析





思路:模拟
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = 0;
        in.nextLine();
        String[] res = new String[n];
        String line = in.nextLine();
        char[] sc = line.toCharArray();
        int mode = sc[0] - '0';
        int st = 0;
        for (int i=0; i<=sc.length; ++i) {
            if (i == sc.length || i%9==0 && i != 0) {
                // st+1 .. i!
                String sub = new String(sc, st+1, i - st - 1);
                res[k++] = mode == 1 ? sub : new StringBuilder(sub).reverse().toString();
                if (i < sc.length) mode = sc[i] - '0';
                st = i;
            }
        }

        System.out.println(String.join(" ", res));

    }
}

第二题 视频会议使用时长最大化




思路:DP,dp[i] 表示 8..i 区间内所有安排方案中,占用会议室时长的最大值。
import java.util.*;
public class Main {
    static int func(int[][] arr) {
        int n = arr.length;
        // 8 .. 23
        int[] dp = new int[24];
        for (int i=8; i<=23; ++i) {
            int max = 0;
            for (int j=n-1; j>=0; --j) {
                if (arr[j][1] <= i) {
                    int t = arr[j][1] - arr[j][0] + dp[arr[j][0]];
                    max = Math.max(max, t);
                }
            }
            dp[i] = max;
        }
        return dp[23];

    }
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        // 8..23
        int T = sc.nextInt();
        for (int _i=0; _i<T; ++_i) {
            int n = sc.nextInt();
            int[][] arr = new int[n][];
            for (int i=0; i<n; ++i) {
                arr[i] = new int[] {sc.nextInt(), sc.nextInt()};
            }
            int res = func(arr);
            System.out.println(res);
        }
    }
}

第三题 仓库出租公司




思路:二分+DP,二分仓库容量k,然后用DP判断k是否可以满足条件。dp[i][j] 表示前 i 个数中是否存在和为 j 的组合,在遍历最后一层判断即可。
import java.util.*;
import java.io.*;
public class Main {

    static boolean chk(int k, int[] arr, int sum) {
        int n = arr.length;
        boolean[][] dp = new boolean[n+1][k+1]; // 前i个数中存在和为 j 的组合
        for (int i=0; i<=n; ++i) dp[i][0] = true;
        for (int i=1; i<=n; ++i) {
            for (int j=1; j<=k; ++j) {
                boolean t = dp[i-1][j];
                if (j-arr[i-1] >= 0) t = (t || dp[i-1][j-arr[i-1]]);
                dp[i][j] = t;
                if (t && j <= k && sum - j <=k) return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = new int[n];
        int sum = 0;
        for (int i=0; i<n; ++i) {
            arr[i] = sc.nextInt();
            sum += arr[i];
        }
        int l = sum / 2, r = sum;
        while (l < r) {
            int mi = l + (r - l) / 2;
            if (chk(mi, arr, sum)) r = mi;
            else l = mi + 1;
        }

        System.out.println(l);
    }
}

#2023一起秋招吧#  
全部评论
大佬,填了确认笔试问卷后。笔试链接是考试当天才发吗?
1 回复 分享
发布于 2022-08-29 10:48 黑龙江
一次dp就可以了吧?dp找到小于等于 sum /2 且最大的仓库容量(即最接近 sum / 2的仓库容量),sum - 最接近的容量,就是答案要的最小的仓库容量。
点赞 回复 分享
发布于 2022-08-30 15:21 重庆
大佬,编程语言有限制吗
点赞 回复 分享
发布于 2022-08-29 20:34 北京
第三题我一开始二维dp超内存了,换一维dp就过了,很神奇
点赞 回复 分享
发布于 2022-08-26 01:38 江苏
大佬  这个是打开三道题都能看见还是必须做完一道提交了才能看到下一道
点赞 回复 分享
发布于 2022-08-30 16:02 陕西
请问算法的题和软开的题同一天是一样的吗
点赞 回复 分享
发布于 2022-08-27 21:55 陕西
大佬
点赞 回复 分享
发布于 2022-08-25 21:18 陕西

相关推荐

今天是在牛客实习大模型算法的最后一天,转眼往回头看也实习了快两个月了,虽然时间不长,但是对于一个大二升大三的学生来说,学习到了太多太多,体验到了很多新事物。作为一个对于&nbsp;Java,python,大模型刚入门的一个学生来讲,领导给我了很多的机会去对不同的模块去做贡献,大模型、前后端、AI&nbsp;项目都有主要的项目。我其实是一个慢热的人,一到陌生环境还有点内向,但刚一到公司就感受到大家的热情和友好,中午和部门领导和同事吃完饭已经融入了这个团体。刚好坐在领导旁边,有什么问题直接问领导,这也让我对很多项目上手都很快,能够很快的知道代码背景或者业务背景来进行开发。同事们也都很积极的给我提供帮助,让写代码调模型这种看似有些无聊的工作都在愉快欢乐的氛围中度过:)公司早上&nbsp;9&nbsp;点&nbsp;30&nbsp;上班,对于我一个爱睡懒觉的人来说让我一开始感觉有点困难,直到来的第一天,就已经逐渐的爱上这里,每天有免费的小零食和饮料不限量提供,配了mac&nbsp;和显示器,和舒服的椅子和工位,让我起床不再是难事。总的来说,这段实习让我对未来有了个更明确的想法,作为学生我知道了我后面在大学应该选什么样的课,来适应真正工作要用到的技术栈;让我也了解到公司代码和学校代码的区别,对写代码有了更深刻的理解。然后就是非常推荐大家来牛客实习呀!
你觉得实习只能是打杂吗?
点赞 评论 收藏
分享
今天先给你一个全景图,把主流「技术岗」一次说清,再给出学历/能力门槛从低到高的排序,方便你选方向。一、除了研发/开发/算法,还有哪些技术岗?测试/质量类测试工程师(功能、自动化、性能、安全)、SDET、QA、测试开发。运维/交付类运维工程师、SRE、DevOps、配置管理、技术支持、系统集成、实施工程师。数据类数据分析师、数据工程师、数据仓库、ETL、数据治理、数据产品经理(偏技术)。安全类信息安全工程师、渗透测试、安全开发、安全运维、合规与审计。硬件/嵌入式/物联网嵌入式软件/硬件工程师、FPGA、芯片验证、驱动开发、射频、PCB、汽车电子。网络与通信网络工程师、网络架构师、通信协议开发、VoIP、5G。产品技术类技术产品经理(TPM)、解决方案架构师、售前/售后技术支持。新兴/交叉类AI&nbsp;系统工程师(偏工程落地)、MLOps、AIGC&nbsp;提示工程师、AR/VR&nbsp;开发、区块链、隐私计算、量子计算等。二、学历&nbsp;&amp;&nbsp;能力门槛从低到高(行业普遍共识,非绝对)【注】同一梯队内部会因公司级别、业务场景不同而有浮动,但整体排序如下:技术支持&nbsp;/&nbsp;实施&nbsp;/&nbsp;系统集成学历:大专起步即可;能力:熟悉产品、懂网络/操作系统基础、沟通能力强。运维&nbsp;/&nbsp;网络&nbsp;/&nbsp;测试(初级功能测试)学历:本科可,大专也有机会;能力:掌握&nbsp;Linux、脚本语言、基础网络或测试理论。数据分析师&nbsp;/&nbsp;ETL&nbsp;/&nbsp;初级数据工程师学历:本科需理工科背景;能力:SQL+Python、常用可视化、统计学基础。研发&nbsp;/&nbsp;开发工程师(业务后端&nbsp;/&nbsp;Web&nbsp;/&nbsp;移动&nbsp;/&nbsp;前端)学历:本科是主流;能力:扎实编程语言、数据结构、系统设计、项目经验。嵌入式&nbsp;/&nbsp;驱动&nbsp;/&nbsp;硬件开发学历:本科及以上;能力:C/C++、操作系统原理、电路知识、芯片手册阅读。安全工程师(应用/系统/渗透)学历:本科及以上;能力:代码审计、漏洞原理、逆向、安全开发,实战要求高。高级数据工程师&nbsp;/&nbsp;数据架构&nbsp;/&nbsp;MLOps&nbsp;/&nbsp;大数据平台学历:本科起步,硕士常见;能力:分布式系统、性能调优、数据建模、机器学习工程化。算法工程师(传统机器学习、深度学习、NLP、CV、AIGC)学历:硕士是敲门砖,博士比例高;能力:数学基础、顶会/顶刊、算法创新、大规模训练、业务落地。
点赞 评论 收藏
分享
评论
9
45
分享

创作者周榜

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