9.14 华为笔试(华子这次有点狠)

有一说一,华子这次的题真的难!

1、动态规划(100%)

将起点看成0,中间有n块板子,终点为n+1,。有一个初始生命数,有些点的板子是空的,走到上面就会减1条生命。题目求从点0到点n+1的方案数。

public class Main {
    static boolean[] absent;
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m = scanner.nextInt();
        int n = scanner.nextInt();
        int k = scanner.nextInt();
        absent = new boolean[n + 2];
        for (int i = 0; i < k; i++) {
            int t = scanner.nextInt();
            absent[t] = true;
        }
        // dp[i][j]:从起点到点i,剩余j条命的走法
        int[][] dp = new int[n + 2][m + 1];
        dp[0][m] = 1;
        // 当前点i
        for (int i = 1; i < n + 2; i++) {
            // 当前点木板缺失,需要在后续的计算中减一条生命值
            int lose = absent[i] ? -1 : 0;
            // 可由前面的点x而来
            for (int x = i - 1; x >= Math.max(i - 3, 0); x--) {
                // 前面点的命
                for (int j = 1; j < m + 1; j++) {
                    dp[i][j + lose] += dp[x][j];
                }
            }
        }
        int ans = 0;
        for (int i = 1; i < m + 1; i++) {
            ans += dp[n + 1][i];
        }
        System.out.println(ans);
    }
}

2、贪心+暴力(100%)

这道题在做的时候贪心可以AC,但可能是测试数据太弱了。评论区有大佬列出了贪心不能过的测试用例,所以这道题用贪心是有问题的

但是我们还是可以学习一下贪心思路,具体可看【LC会议室Ⅱ】这道题,思路几乎一样。n个任务和m个可完成任务的容器,就完成这些任务所需的最小时间。
这道题贪了三个地方:

  1. 数据按照传输时间逆序排序,先处理传输时间最长的;
  2. 在满足传输条件的所有通道里,优先选取最早空闲的(即最早完成自己通道内传输任务的),这样可以最小限度地增加通道的处理时间;
  3. 如果最早空闲时间也相同,就选取传输能力最小的,将能力大的留给后面的任务。
    public class Main2 {
     public static void main(String[] args) {
         Scanner scanner = new Scanner(System.in);
         int m = scanner.nextInt();
         // 通道数
         int n = scanner.nextInt();
         // [通道传输能力][空闲时间]
         int[][] channels = new int[n][2];
         for (int i = 0; i < n; i++) {
             channels[i][0] = scanner.nextInt();
         }
         int[][] data = new int[m][2];
         for (int i = 0; i < m; i++) {
             // 大小
             data[i][0] = scanner.nextInt();
         }
         for (int i = 0; i < m; i++) {
             // 传输时长
             data[i][1] = scanner.nextInt();
         }
         // 按传输时长逆序
         Arrays.sort(data, (a, b) -> {
             if (a[1] == b[1]) {
                 return a[0] - b[0];
             }
             return b[1] - a[1];
         });
         // 贪心1
         for (int[] d : data) {
             int minIdleTime = Integer.MAX_VALUE;
             int ch = 0;
             // 遍历每个通道
             for (int i = 0; i < n; i++) {
                 // 需要满足传输条件
                 if (channels[i][0] >= d[0]) {
                     // 贪心2
                     if (channels[i][1] < minIdleTime) {
                         ch = i;
                         minIdleTime = channels[i][1];
                     } else if (channels[i][1] == minIdleTime && channels[i][0] < channels[ch][0]) {
                         // 贪心3
                         ch = i;
                     }
                 }
             }
             channels[ch][1] += d[1];
         }
         int max = 0;
         for (int i = 0; i < n; i++) {
             max = Math.max(max, channels[i][1]);
         }
         System.out.println(max);
     }
    }

    3、带TTL的最短路径算法(0%,直接不会)

    出一个朴素版的最短路径我都不一定能写出来,结果还带一个额外条件TTL,我还看到了允许的运行时间很苛刻,Java都只有800ms,我都把图建起来了,还是没有写下去的勇气!

考完后我同学说最后输出-1竟然可以过19%,57分啊!(心痛!)

#华为笔试##华为##华为招聘##23届秋招笔面经#
全部评论
第三题print(-1)为菜鸡的我达到100分做出了巨大贡献
63 回复 分享
发布于 2022-09-14 23:08 广东
第二题是npc问题,贪心得不到最优解。 我给一组数据, 5 2 100 100 7 6 4 3 2 7 6 4 3 2 你的程序输出12,最优解应该是11 7+4,6+3+2
12 回复 分享
发布于 2022-09-15 09:01 浙江
第三题建完图 dfs 能过 75%:每走到一个结点,ttl - 1,如果 ttl < 0,则直接 return。
5 回复 分享
发布于 2022-09-14 23:36 江苏
cpp选手,第三题用的广搜,过了79%,剩下的没有过的超时。
3 回复 分享
发布于 2022-09-15 21:42 广东
3 回复 分享
发布于 2022-09-15 01:11 四川
可以到我主页看看我公司,今年互联网情况不好的我觉得是个好的选择
2 回复 分享
发布于 2022-09-15 14:32 北京
华为第三题我用迪杰斯特拉算法写的,过了57%,没时间找问题了
2 回复 分享
发布于 2022-09-15 09:53 四川
第三题dfs
2 回复 分享
发布于 2022-09-15 00:14 四川
第三题用迪杰斯特拉算法可以算出6,但是我ttl不知道为啥算的不一样,蹲一个大佬教教我www
2 回复 分享
发布于 2022-09-14 23:57 广东
看看得物,前几天刚开,提前投递机会更大!!!https://app.mokahr.com/m/campus_apply/thedu/37483?recommendCode=DScFy1Ng#/jobs
1 回复 分享
发布于 2022-09-18 19:51 广东
我昨天的笔试第三天直接cout 《 2通过了15,这样会给分吗
1 回复 分享
发布于 2022-09-17 13:17 江苏
🐂
1 回复 分享
发布于 2022-09-16 11:31 广东
第三题考虑dp, f[i][j]表示到达i点走了j步的最短路径,然后dp就可以了
1 回复 分享
发布于 2022-09-15 16:40 黑龙江
第二题不是npc问题吧,可以二分答案然后用网络流判断是否有解,只不过时间复杂度比较高。。。
1 回复 分享
发布于 2022-09-15 15:13 湖南
华子是多少分过笔试啊
1 回复 分享
发布于 2022-09-15 15:06 四川
有无兄弟第一题15%的,思路一样的还是15%,是有什么特殊的地方没考虑到吗?
1 回复 分享
发布于 2022-09-15 11:09 重庆
厉害厉害
1 回复 分享
发布于 2022-09-15 01:46 广东
可以到我主页看看我公司,今年互联网情况不好的我觉得是个好的选择
点赞 回复 分享
发布于 2022-11-08 15:48 香港
第三题过84%
点赞 回复 分享
发布于 2022-09-28 11:25 山东
第三题边数限制最短路问题,感觉应该bellman-ford算法直接过的?
点赞 回复 分享
发布于 2022-09-24 09:39 浙江

相关推荐

2025-12-24 15:25
已编辑
门头沟学院 前端工程师
是腾讯的csig腾讯云,前天晚上九点突然打电话约面,激动的通宵学了一晚上,第二天状态很差改了今天(以后再也不通宵学习了)感觉自己浪费了面试官一个半小时单纯手写+场景,无八股无项目无算法,打击真的很大,全是在面试官提醒的情况下完成的,自己技术方面真的还是有待提高,实力匹配不上大厂和已经面试的两个公司完全不一样,很注重编码能力和解决问题的能力,然而我这两个方面都很薄弱,面试官人很好很耐心的等我写完题目,遇到瓶颈也会提醒我,写不出题也会很耐心的跟我讲解好感动,到最后面试结束还安慰我打算把下周最后一场面试面完之后就不面啦,如果能去实习还是很开心,但是最重要的还是好好努力提高技术以下是面经第一题//&nbsp;实现一个解析&nbsp;url&nbsp;参数的函数function&nbsp;parseUrl(urlStr)&nbsp;{//&nbsp;TODO}parseUrl('*********************************************');//&nbsp;返回&nbsp;{a:&nbsp;1,&nbsp;b:&nbsp;2,&nbsp;c:&nbsp;3}追问:在链接里见过什么部分?用&nbsp;hash&nbsp;路由的话放在哪第二题//&nbsp;考虑有一个异步任务要执行,返回&nbsp;Promise,这个任务可能会失败,请实现&nbsp;retry&nbsp;方法,返回新方法,可以在失败后自动重试指定的次数。/***&nbsp;异步任务重试*&nbsp;@param&nbsp;task&nbsp;要执行的异步任务*&nbsp;@param&nbsp;times&nbsp;需要重试的次数,默认为&nbsp;3&nbsp;次*/function&nbsp;retry(task,&nbsp;times&nbsp;=&nbsp;3)&nbsp;{//&nbsp;TODO:&nbsp;请实现}//&nbsp;---------------测试示例&nbsp;----------------//&nbsp;原方法const&nbsp;request&nbsp;=&nbsp;async&nbsp;(data)&nbsp;=&gt;&nbsp;{//&nbsp;模拟失败if&nbsp;(Math.random()&nbsp;&lt;&nbsp;0.7)&nbsp;{throw&nbsp;new&nbsp;Error('request&nbsp;failed');}const&nbsp;res&nbsp;=&nbsp;await&nbsp;fetch(&#39;https://jsonplaceholder.typicode.com/posts&#39;,&nbsp;{method:&nbsp;'POST',body:&nbsp;JSON.stringify(data),});return&nbsp;res.json();}//&nbsp;新的方法const&nbsp;requestWithRetry&nbsp;=&nbsp;retry(request);//&nbsp;使用async&nbsp;function&nbsp;run()&nbsp;{const&nbsp;res&nbsp;=&nbsp;await&nbsp;requestWithRetry({&nbsp;body:&nbsp;'content'&nbsp;});console.log(res);}run();第三题就是给&nbsp;retry&nbsp;函数添加类型注释,用到泛型第四题:在组件库中将&nbsp;Alert&nbsp;用&nbsp;api&nbsp;的形式实现(应该就是&nbsp;message&nbsp;这个组件)怎么渲染到一个浮层里而不是原地渲染出来
不知道怎么取名字_:技术这个东西,太杂了,而且要下功夫的
查看5道真题和解析
点赞 评论 收藏
分享
评论
83
422
分享

创作者周榜

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