奇安信8.1笔试

8.1号下午考的,Java软件开发岗。

题目总体中等偏下,选择题大部分都遇到过。

大部分都是操作系统和网络问题。这一部分需要多练。

两道编程题思路也很简单,常刷leetcode基本上都能秒掉。


1.笔试题型

考试时间120分钟

1.单选题:20道(40分)

2.多选题:10道(20分)

3.编程题:2道(40分,每道20分)

2.Coding1

题目描述:

1.2020年春节之际,新冠肺炎爆发,国内医疗资源大量紧缺

2.小明作为一位采购员,被派到国外采购紧缺物资

3.由于国内需要的物资种类很多,不同品牌种类的物资在疫情中的 使用价值 也不同

4.在了解商品情况后,小明开始为采购哪些物资才最合适而烦恼。

5.假如给定了采购预算 T , 每种物资的价格Pn和使用价值 Wn

6.每种物资的可采购数量不限,你能帮他快速决定出应该采购的物资吗?

7.要求采购物资的总价格不能超过采购预算

8.在这个前提下给出的采购列表要使得这批物资的使用价值最大。

输入描述:
每个测试输入包含一个测试用例
第一行是总预算(不大于200000)
第二行是物资种类总数 n (不大于20)
后面有n行数据, 每一行代表一种物资的价格和使用价值,被空格分成两列, 每列数据值不大于15000

例如 第3行数据中 第一列是物资1的价格P1, 第二列是物资2的使用价值 W1
第4行数据中 第一列是物资2的价格 P2, 第二列是物资2的使用价值 W2。
以此类推,第 n+2 行中第一列是物资 n 的价格 Pn ,第二列是 物资 n 的价格 Wn。

输出描述:
输出采购物资能达到的最高使用价值,格式是单独的一行 数值

示例1:
输入
100
5
77 92
22 22
29 36
50 46
99 90

输出
114

说明
100预算、5种商品情况下,购买 1个商品一 和 1个商品二 可以达到最大使用价值114

示例2:
输入
200
8
79 83
58 81
86 54
110 1500
62 52
45 48
68 62
30 22

输出
253

说明
200预算、8种商品情况下,购买 1个商品二 、 1个商品四 和 一个商品八 可以达到最大使用价值253

备注:
注意:每种物资的可采购数量没有限制


思路:

这题就是一个完全背包问题,非常的经典。

背包问题也是笔试常考的dp知识点了。

建议去这里刷背包问题:https://www.acwing.com/problem/content/3/

参考代码:

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int money = scanner.nextInt();
        int n = scanner.nextInt();
        int[] p = new int[n];
        int[] w = new int[n];
        for (int i = 0; i < n; i++) {
            p[i] = scanner.nextInt();
            w[i] = scanner.nextInt();
        }

        int[] dp = new int[money + 1];
        dp[0] = 0;
        for (int curMoney = 1; curMoney <= money; curMoney++) {
            for (int j = 1; j <= n; j++) {
                if (curMoney >= p[j - 1]) {
                    dp[curMoney] = Math.max(dp[curMoney], dp[curMoney - p[j - 1]] + w[j - 1]);
                }
            }
        }
        System.out.println(dp[money]);
    }

3.Coding2

题目描述:

1.如果一个正整数可以被7整除,我们称之为亲7数

2.对于给出的一组个位数字,请找出使用所有的数字排列出的数中的亲7数的个数。

3.其中给出的个位数字数组中每一个都是不相关的,即使有重复的数字

4.如{1,1,2}排列出的数为{112,121,112,121,211,211}, 亲7数为{112,112}共2个。

输入:个位数字数组,数组有m个元素

输出:亲7数个数

示例1:
输入
[1,1,2]

输出
2


思路:

这题也没有什么难点,暴力 +回溯求所有可能的排列就行。

不过回溯可能会超时,需要优化一下。

回溯使用的是一个很经典的回溯模板。

建议刷这个:
https://leetcode-cn.com/problems/permutations-ii/


参考代码:

这题很友好的没有要求写输入输出,和平时刷题一样,写代码交就行。😊


    private int count = 0;

    public int code(int[] digit) {
        LinkedList<Integer> track = new LinkedList<>();
        boolean[] flag = new boolean[digit.length];
        backtrace(digit, digit.length, track, flag);
        return count;
    }

    /**
     * 回溯
     *
     * @param nums  元素数组
     * @param size  元素个数
     * @param track 记录list
     * @param flag  元素标记
     */
    public void backtrace(int[] nums, int size, LinkedList<Integer> track, boolean[] flag) {
        //递归结束条件
        if (track.size() == size && check(track)) {
            count++;
        }
        //开始遍历元素
        for (int i = 0; i < size; i++) {
            if (flag[i]) {
                continue;
            }
            flag[i] = true;
            track.add(nums[i]);
            backtrace(nums, size, track, flag);
            track.pollLast();
            flag[i] = false;
        }
    }

    /**
     * 判断是否是亲7数
     */
    public boolean check(LinkedList<Integer> list) {
        StringBuilder s = new StringBuilder();
        for (int i : list) {
            s.append(i);
        }
        int n = Integer.parseInt(s.toString());
        return n % 7 == 0;
    }

代码写的很垃圾,大佬请忽略。😅

4.最后

秋招基本上都要过笔试这一关,可见大部分公司对算法和基础的要求了。

过几天准备开始海投了。

都说今年难,大部分公司都在缩招,今年春招我连实习都没找到。。。

秋招没找的话准备去考研了。。。(不想考研呀)

还是太菜了,不说了,多刷题吧。

#奇安信##笔经##Java工程师#
全部评论
    flag[i] = true;         track.add(nums[i]);         backtrace(nums, size, track, flag);//这里应该是size+1吧?         track.pollLast();         flag[i] = false;
点赞 回复 分享
发布于 2020-08-09 23:36
秋招没找到考研还来得及吗。。
点赞 回复 分享
发布于 2020-08-02 07:57
哈?第二题不需要输入输出??我这要呀还读个字符串自己切割。。😂😂
点赞 回复 分享
发布于 2020-08-02 06:39

相关推荐

吴offer选手:HR:我KPI到手了就行,合不合适关我什么事
点赞 评论 收藏
分享
咦哟,从去年八月份开始长跑,两处实习转正都失败了,风雨飘摇,终于拿到offer了更新一下面试记录:秋招:多部门反复面试然后挂掉然后复活,具体问了啥已经忘了,只是被反复煎炸,直至焦香😋春招:base北京抖音hr打来电话说再次复活,准备面试,gogogo北京抖音一面:六道笔试题:1.promise顺序2.定义域问题3.flat展开4.并发请求5.岛屿数量算法(力扣)深度,广度都写6.忘记了,好像也是算法,难度中等其他问题多是框架底层设计,实习项目重难点~~~秒过😇北京抖音二面:三道笔试题:(为什么只有三道是因为第三道没做出来,卡住了)1.中等难度算法(忘记啥题了,应该是个数组的)2.认识js的继承本质(手写继承模式,深入js的面相对象开发)3.手写vue的响应式(卡在了watch,导致挂掉)---后知后觉是我的注册副作用函数写得有问题,有点紧张了其他题目多是项目拷打,项目亮点,对实习项目的贡献~~~第二天,挂,but立马复活转战深圳客服当天约面深圳客服一面:六道笔试题,由于面过太多次字节,面试官叫我直接写,不用讲,快些写完😋,具体都是些继承,深拷贝(注意对数组对象分开处理,深层次对象,循环引用),加中等难度算法题~~~秒过深圳客服二面:口诉八股大战:大概囊括网络,浏览器渲染原理,动画优化,时间循环,任务队列等等(你能想到的简单八股通通拉出来鞭尸😋)算法题:笔试题6道:1:找出数组内重复的数,arr[0]-arr[n]内的数大小为[1-n],例如[1,2,2,3,3]返回[2,3],要求o(n),且不使用任何额外空间(做到了o(n),空间方面欠佳,给面试官说进入下一题,做不来了)2:原滋原味的继承(所以继承真滴很重要)3:力扣股票购买时机难度中等其他滴也忘记了,因为拿到offer后鼠鼠一下子就落地了,脑子自动过滤掉可能会攻击鼠鼠的记忆😷~~~秒过深圳客服三面:项目大战参与战斗的人员有:成员1:表单封装及其底层原理,使用成本的优化,声明式表单成员2:公司内部库生命周期管理成员3:第三方库和内部库冲突如何源码断点调试并打补丁解决成员4:埋点的艺术成员5:线上项目捷报频传如何查出内鬼成员6:大文件分片的风流趣事成员7:设计模式对对碰成员8:我构建hooks应对经理的新增的小需求的故事可能项目回答的比较流利,笔试题3道,都很简单,相信大家应该都可以手拿把掐😇~~~过过过无hr面后续煎熬等待几天直接hr打电话发offer了,希望大家也可以拿到自己心仪的offer
法力无边年:牛哇,你真是准备得充分,我对你没有嫉妒,都是实打实付出
查看19道真题和解析
点赞 评论 收藏
分享
评论
10
62
分享

创作者周榜

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