京东秋招后端笔试第五场(答得不好)

选择题

记得考了:

操作系统中单处理器、多处理器互斥

数据库的共享锁和互斥锁

哈希采用线性探测时 平均搜索长度

HTTP2 和 HTTP3的区别,基于什么协议,HTTP2是不是二进制的

编程题

第一题

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();//有这么多个卡 编号是1到n
        int m=in.nextInt();//有这么多个门 每个门对应一个区间
//本质上 是要确认有没有哪个数 落在所有区间内
        int left=Integer.MIN_VALUE,right=Integer.MAX_VALUE;
        int ans=0;
        for(int i=0;i<m;i++){
            int li=in.nextInt();
            int ri=in.nextInt();
            left=Math.max(left,li);
            right=Math.min(right,ri);
            if(left>right)
                break;
        }
        if(left<=right)
            ans=right-left+1;
        System.out.println(ans);

    }
}

第二题 只通过了37.5%的用例,时间超时

调了快一小时,用例通过数都没变 懵逼中 希望有大佬能发下解答

题目

我写的代码 思路就是用回溯法找到所有情况

把问题转换成了 找到walk个不用跳的格子

import java.util.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    static Set<Long> set;
    static long L;static long b;
    static Map<Long[],Boolean> quicktest;
    private static boolean test(long walk,long cur){//试探 返回true或者false
        Boolean ans=quicktest.getOrDefault(new Long[]{walk,cur},null);
        if(ans!=null)
            return ans;
        if(walk==0) {
            quicktest.put(new Long[]{walk,cur},cur <= L);
            return cur <= L;
        }
        if(walk<0)
        { quicktest.put(new Long[]{walk,cur},false);
            return false;}
        if(cur>=L)
        { quicktest.put(new Long[]{walk,cur},false);
            return false;}
        //如果跳
        cur+=b;
        boolean tmp=test(walk,cur),tmp2=false;
        if(tmp)
            return true;
        cur-=b;//撤回这个跳
        //判断这里能不能走
        if(set.contains(cur)==false){//没有障碍物 能走
            walk--;cur++;
            tmp2=test(walk,cur);
        }
        quicktest.put(new Long[]{walk,cur},tmp2);
        return tmp2;
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int T= in.nextInt();//一共T组数据
        for(int i=0;i<T;i++){
            int n= in.nextInt();//一共有n个障碍
            L= in.nextLong();//起点是0 终点是L
            long m= in.nextLong();//必须恰好完成m次
            b= in.nextLong();//每次只跳这个长度
            set=new HashSet<>();
            //接下来输入n个整数
            for(int j=0;j<n;j++){
                long a=in.nextLong();//可以得到每个障碍物的位置
                set.add(a);
            }
            quicktest=new HashMap();
            //总结一下约束条件:最后恰好到达L。跳的次数恰好是m。如果从i起跳,那么会到达i+b
            //思路:一次递归 只要能恰好找到walk个 用走的格子就行
            long walk=L-m*b;
            if(walk<0){
                System.out.println("No");
                continue;
            }else if(walk==0){
                System.out.println("Yes");
                continue;
            }
            boolean ans=test(walk,0);
            //最后输出yes或者no
            if(ans){
                System.out.println("Yes");
            }else
                System.out.println("No");

        }

    }
}

第三题

题目:n,k,m,数组里任意k个数的和都小于等于m

考完刷了下大佬们的笔记。主要是用m/k和m%k来操作

这种思路觉得比较顺:非最后k个数如果比sum/k大直接减到sum/k,对最后k个数求和,将和减到sum

#京东求职进展汇总##笔试#
全部评论
我直接去做第三题了,过了86用例,第二题打表全no都25用例,哥们下次遇见第二题这种不知道在说什么的直接骗点分先看后面的
1 回复 分享
发布于 09-07 18:17 北京
第二题是我的第三题,我连题目都没看懂
点赞 回复 分享
发布于 09-07 18:44 重庆

相关推荐

头像
10-15 21:14
门头沟学院 C++
10.15,难度中等。其中数学题和规律题比较多第一题:给你1-n个数,你能填充k个,如果i被填充且i&nbsp;+&nbsp;1没有被填充则积分增加1这题考虑构造最优解法,先间隔填充(n&nbsp;+&nbsp;1)&nbsp;/&nbsp;2个,然后反向填充。答案公式为(n&nbsp;+&nbsp;1)&nbsp;/&nbsp;2&nbsp;-&nbsp;(k&nbsp;-&nbsp;(n&nbsp;+&nbsp;1)&nbsp;/&nbsp;2)&nbsp;+&nbsp;n&nbsp;%&nbsp;2&nbsp;==&nbsp;0&nbsp;第二题:给你一个字符串,执行size次变换,第i次变换将s【i】移动到字符串末尾。问size次变换之后答案是多少暴力变换时间复杂度过高。这里考虑递归实现分治变换。n最开始为size,每次变换当前n&nbsp;/&nbsp;2&nbsp;次,直到n&nbsp;=&nbsp;1。注意每次要记录起始位置。第三题:给你n大小的数列,你要做n&nbsp;-&nbsp;1次变化,每次使得a[i]&nbsp;+&nbsp;(-1&nbsp;|&nbsp;1)&nbsp;*a[i&nbsp;+&nbsp;1]。如{1,&nbsp;2,&nbsp;3,&nbsp;4},&nbsp;第一次变化到{1&nbsp;+&nbsp;2,&nbsp;2&nbsp;-&nbsp;3,&nbsp;3&nbsp;+&nbsp;4}。这题玩弄玩弄样例,发现n为偶数具备明显规律。当n为偶数时,满足最后两项的和为间隔的二项式系数变形。即为a[1]&nbsp;+&nbsp;C(n&nbsp;/&nbsp;2,&nbsp;1)&nbsp;*&nbsp;a[3]&nbsp;+&nbsp;C(n&nbsp;/&nbsp;2,&nbsp;2)&nbsp;*&nbsp;a[5]&nbsp;....&nbsp;+&nbsp;C(n&nbsp;/&nbsp;2,&nbsp;n&nbsp;/&nbsp;2)&nbsp;a[n]。而n为奇数时直接变化成偶数即可。不记得怎么写C的预处理了,直接交卷了#百度求职进展汇总##百度##笔试##你都收到了哪些公司的感谢信?#
点赞 评论 收藏
分享
8 9 评论
分享
牛客网
牛客企业服务