2021暑期实习京东4.24笔试题目(技术运维岗)

考试情况:
时间:19:00---21:00
平台:赛码
选择题:30道,涉及计算机网络、Linux基础(大量)、mysql数据库、数据结构(连通图……)读程序
算法题:2道,可以在本地IDE调试,难度适中。


1、超大整数转字符串处理问题
A随手写出了一个正整数n。他可以对这个数字做出如下操作: 1、 把这个数字除以一个数,且保证结果是大于1的正整数; 2、 把这个数字减去1。 
小A想知道通过如上操作把这个数变成1的最小操作次数。 输入:第一行有1个正整数T,表示数据的组数; 接下来T行,每行有1个正整数n,含义如题。  1 ≤ T ≤ 100001 ≤ n ≤ 10的18次方输出:输出T行,每行1个整数,表示题目所求的最小操作次数。 输入:2 
      1
      4 输出:0 
      2 
思路1:开始采用动态规划思想,但是只能通过36%,问题出现在对于每次输入的n要自底向上逐个值进行计算,我最初分析可能是时间复杂度过高,改用思路2递归求解。
public class First {
    public static final int INT_MAX=0X7FFFFFFA;
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int t=cin.nextInt();
        int n;
        while (t-->0){
            n=cin.nextInt();
            int[]res=new int[n+1];
            res[1]=0;
            if(n==1){
                System.out.println(0);
            }
            else{
                res[2]=1;
                for(int i=3;i<=n;i++){
                    int yueshu=yueshu(i);
                    if(yueshu>=INT_MAX){
                        res[i]=res[i-1]+1;
                    }
                    else{
                        res[i]=Math.min(res[i-1],res[i/yueshu])+1;
                    }
                }

            }
            for(int j=1;j<=n;j++){
                System.out.println("j="+j+"  值:"+res[j]);
            }
        }
    }

    private static int yueshu(int n) {
        for(int i=n-1;i>1;i--)
        {
            if(n%i==0&&n/i>1)
            {
                return i;
            }
        }
        return INT_MAX;
    }
}
思路2:对于输入的n,只需要递归去算n,n/(最大约数),根据奇偶最多也就2次或3次即可得到结果,相比于上面计算n次有了大大的提升,但是结果还是通过36%。认真分析后采用了思路3
public class second {
    public static final int INT_MAX=0X7FFFFFFA;
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int t=cin.nextInt();
        int n;
        while (t-->0){
            n=cin.nextInt();
            int res=getnum(n);
            System.out.println(res);
        }
    }
    private static int getnum(int n){
        if(n<=1)
            return 0;
        if(n==2)
            return 1;
        if(yueshu(n)>=INT_MAX){
            return getnum(n-1)+1;
        }
        else{
            return Math.min(getnum(n-1),getnum(n/yueshu(n)))+1;
        }


    }
    private static int yueshu(int n) {
        for(int i=n-1;i>1;i--)
        {
            if(n%i==0)
            {
                return i;
            }
        }
        return INT_MAX;
    }
}
思路3:通过思路2 的尝试我们发现结果有一定的规律性,对于奇数n我们需要计算3次(n=n-1,n除以约束降到2,2-1)对于偶数n只需要执行后面2步即可,所以对于前面特殊情况特殊处理外,后面只需要判断奇偶数进行输出3、2就可以了。因为时间原因,代码比较粗糙,匆匆的改了下,交上去100%,就去做了第二题,但是基本的思想已经在里面了,后面可以自己优化。
核心思想:
1 ≤ n ≤ 10的18次方
对于超长的输入采用字符串进行读取处理 ,取最后以为判断奇偶进行输出,如果有其它处理大数方法请多多指教。
public class four {
    public static void main(String[] args) {
        Scanner cin=new Scanner(System.in);
        int t=cin.nextInt();
        int n;
        String str;
        while (t-->0){
            str=cin.next();
            int res;
            if(str.length()<2){
                n=Integer.parseInt(str);
                if(n==1)
                    res=0;
                else if(n==2)
                    res=1;
                else if(n==3)
                    res=2;
                else if(n==4)
                    res=2;
                else{
                    if(n%2==0)
                    {
                        res=2;
                    }
                    else {
                        res=3;
                    }
                }
            }
            else{
                int len=str.length();
                char c=str.charAt(len-1);
                if(c=='2'||c=='0'||c=='4'||c=='6'||c=='8'){
                    res=2;
                }
                else{
                    res=3;
                }
            }

            System.out.println(res);
        }
    }
}
题目2:
在长度为n的数组上进行查找连续长度为k的区间内和的最大值,最后返回最大值区间的中间位置下标
输入:10 3 
    5 5 5 10 10 10 5 10 10 10
    代表n=10 k=3,后面是输入的n个数
输出:5
    代表下标为4 5 6 三个元素的和最大为30(注意题目要求若符合区域有多个,取较前的),中间下标=5
    

因为时间问题,采用暴力搜索的策略
public class NOtwo {
    public static void main(String[] args) {
        int n,k;
        Scanner cin=new Scanner(System.in);
        n=cin.nextInt();
        k=cin.nextInt();
        ArrayList<Integer> list = new ArrayList<>();
        for(int i=0;i<n;i++){
            list.add(cin.nextInt());
        }

        int maxsum=0;
        int index=0;
        for(int i=0;i+k<=n;i++){
            int sum=0;
            int j;
            for(j=0;j<k;j++){
                sum+=list.get(i+j);
            }
            if(sum>maxsum)
            {

                index=i+(j/2)+1;
                maxsum=sum;
            }
        }
        System.out.println(index);
    }
}

最后过了78%,请大佬指教……




#京东##笔经##运维工程师#
全部评论
我第一题,最后10分钟想起来的,直接判断字符串长度和最后一个字符就行了。😂
点赞 回复 分享
发布于 2021-04-24 21:44

相关推荐

不愿透露姓名的神秘牛友
11-15 19:58
点赞 评论 收藏
分享
面试官:你有什么想问的嘛我:除了薪资待遇,其他的都不关心干嘛,这是在干嘛?生怕自己拿下offer呀!可不要以为反问环节仅仅是面试官们的礼貌,但回答不好也能让你原地翻车、甚至逆风翻盘!【千万不要这样问】要知道,面试官是能够从你的反问中获取到很多信息的:求职态度、思考角度、对企业和了解的思考以及你未来的职业规划和上进心…所以一定要谨慎回答✈。❎不要上来就问薪资其实大家都明白,大多数人找工作不就图钱嘛但在业务面/领导面的时候,只要他们没有主动提及,大家不要主动去问。因为很多面试官会觉得你不在乎岗位/发展,只图钱(啊…这…)。关于钱的问题,一般HR会在面试的最后主动提及,不需要大家去反问的哦~你可以问问具体的薪资结构、五险一金缴纳比例等问题。❎不要问傻问题的问题什么是“傻”问题?“这个岗位是干什么的?”“你觉得我表现的好吗,能通过面试吗?”“您做到这个岗位花了几年,做了些什么?”当这些问题一出口,面试官表示真的绷不住了:不知道干什么就来面试?公司未来发展要跟应届生汇报吗?你想替代我的位置?这些跟工作岗位毫无关系的问题,尽量少提及,言多必失啊同学们。❎不要说自己没有问题了哪怕不知道要问些什么,也不要这样说,除非你对此公司并不怎么感兴趣。否则面试官会判定你的求职意向不高而被pass。在面试的收尾阶段,你更应该表现出强烈的求知欲与对岗位的忠诚度。以此来巩固/刷新面试官对你的印象。【反问这些问题加分】其实,面试反问的问题很简单的,快来抄作业!✅问HR:了解部门情况、发展空间、公司氛围…●入职后是否有相关的岗位培训、新员工入职培训?大概需要多久?●薪资的构成是怎么样的?五险一金缴纳比例如何(这句话可在HR提及薪资后问,如果没有提及则不要问)●签订多久合同?试用期多久,转正需要什么条件?●岗位所在的团队氛围如何?领导是个什么样的人?(问清团队氛围很重要,气场不合赶紧跑)●公司的晋升/涨薪/培养机制是怎样的?……反问HR的面试问题,可以多问薪资、发展相关,减少业务类的问题。✅&nbsp;问业务面试官/直属领导:了解具体岗位、未来发展以及期望●所在团队的人员结构和组织分工是什么?(这里可以知道你一个人要负责多少活)●绩效考核标准是什么(比如运营的涨粉量、完读率、产出等)●您认为目前这个岗位存在的困境是什么,我会遇到什么样的挑战?●您认为这个岗位的候选人应该具备什么特质?●该岗位的工作强度/饱和度/加班情况如何?●该岗位的稳定性/未来发展如何?●通过这场面试,您能够给我一些建议吗?●我看xxx公司xx业务xx,咱们公司xx业务xxx…(体现你提前有做了功课)……反问业务面面试官的问题,多提及业务方向相关:可以就你们俩之前的交谈,继续延伸;也可以开展新的方向,比如你对竞对公司的了解和调查等。其实,反问面试官真的没有那么难,就是坑多了点~问的问题也都大差不差,照着背就好啦!另外,无论问哪个面试官,都要积极凸显出你的入职意愿、你对岗位的思考以及你的上进心、忠心… #机械人面试中的常问题#&nbsp;&nbsp;#牛客解忧铺#
点赞 评论 收藏
分享
点赞 评论 收藏
分享
4 11 评论
分享
牛客网
牛客企业服务