京东实习笔试4.18

是这样的,放在本地IDE里面怕丢,这一次对于我自己来说是所有笔试里面最差强人意的一次了,虽然没有全部ac,但是我已经做了最大程度的尝试,下面将两道题目的解题过程放在这上面,留个念想

六个面是否可以组成长方体
一般笔试的第一道编程题都不会太难的,这道题目我完成了自己设计的测试用例就直接去做第二道题了,但是回头发现漏掉了一些情况

package java2;

import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) {
        int[][] arr = {
                {1345 ,2584},
                {2584, 683},
                {2584, 1345},
                {683 ,1345},
                {683, 1345},
                {2584, 683}};
        boolean res = constructBox(arr);
        System.out.println(res);
    }
    //判断给定的测试用例是否可以组成长方体纸箱
    //方法用来检查一组测试用例,如果有多组,那么分别调用即可
    //二位数组num表示用例,每个长宽为一个数组,共六个
    public static boolean constructBox(int[][] nums){
        //思路:如果六块板可以组成长方体,那么一定存在三条公共边,这三个边可以构成一个完整的角
        Map<Integer,Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            for (int j = 0; j < nums[0].length; j++) {
                map.put(nums[i][j],map.getOrDefault(nums[i][j],0));
            }
        }
        if(map.size() > 3){
            return false;
        }
        return true;
    }
}

最少满足要求的座位数
第二道题就是笔试题的标配了,情景描述题,自己建模,自己设计测试用例,我已经基本实现了自己的思路,注释里面将解题过程也表达出来了,但是最后在main方法中没来得及进行测试

package java1;

/**
 * @Author : hadoo
 * @Date : 2020/4/18 20:06
 */
public class Main {
    public static void main(String[] args) {

    }
   //思路:求出订票顺序“最差”的情况下,至少需要多少座位
    //情景约定:
    //最差的情况也就是明明可以复用之前的座位,但是因为订票顺序的关系却需要多用一个座位,我们要求的就是所有最差情况的和
    //如果是ACB的顺序,那么就是到达2站点时B才开始买票,所以需要两个座位就够
    //如果是ABC的顺序,那么B一定要在1站点就买票,因为C的顺序在B后面且经过站点为1--3,所以B是在1买的票,就需要多家一个座位,一个站点两个人不可能买同一个座位的票

    //nums数组表示每个乘客的乘车区间
    public int minSeats(int[][] nums){
        //找出最差的买票顺序
        //找到乘车始发站最小的
        int min = 0;
        for (int i = 0; i < nums.length; i++) {
             min = Math.min(min,nums[i][0]);
        }
        //在最小始发站之前的一定要提前买票
        int needNum = 0;
        int index = 0;
        for (int i = 0; i < nums.length; i++) {
            if(nums[i][0] >= min){
                needNum++;
                index = i;
            }
        }
        //是否有更大的
        boolean flag = false;
        for (int i = index; i < nums.length; i++) {
            for (int j = 0; j < index; j++) {
                if(nums[i][0] > nums[j][1]){
                    flag = true;
                }

            }
            if(flag == false){
                needNum++;
            }
        }
        //之后的订票乘客如果始发站比之前订票的终点站大,那么可以复用座位
        return needNum;
    }
}

其他的30道选择题就是一些基础知识,问的还是比较深,比较全面的,这一部分还是需要一个点一个点的去雕磨,本来打算这周末去找狐朋狗友出去浪的,我就把计划取消来应对这个笔试了,希望能够得到面试机会进行一次面试的历练吧

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://hadoo666.top/archives/京东实习笔试418