华为机试915-第一题代码

第一题用了一个比较笨拙的方法,应该能通过部分案例,但是通过率为0,有大佬帮忙看看是什么问题吗?
    public static void main(String[] args) { new Scanner(System.in);

        String gw = sc.nextLine();

        String xdq = sc.nextLine();

        String[] scArray = gw.split(" ");

        String[] xdqArray = xdq.split(" ");

        List<Integer> gwList = new ArrayList<>(); // //  工位

        for(String s : scArray) {

            gwList.add(Integer.parseInt(s));

        }

        List<Integer> xdqList = new ArrayList<>(); // // 消毒器

        for(String s : xdqArray) {

            xdqList.add(Integer.parseInt(s));

        }

        int gwNum = gwList.size();

        int xdqNum = xdqList.size();

        int minRange = Integer.MAX_VALUE; // 最小工作半径

        int range = 0;

        Collections.sort(gwList);

        Collections.sort(xdqList);        

        int[] leftBorders = new int[xdqNum];

        int[] rightBorders = new int[xdqNum];

        for(int i = 0; i < xdqNum; ++i){

            if(xdqList.get(i) < gwList.get(0)) {

                leftBorders[i] = 0;

            }else {

                leftBorders[i] = gwList.get(0);

            }

        }

        for(int i = 0; i < xdqNum; ++i){

            if(xdqList.get(i) > gwList.get(gwNum-1)) {

                rightBorders[i] = 0;

            }else {

                rightBorders[i] = gwList.get(gwNum-1);

            }

        }

        int xdqPosition;

        int leftBorder ;

        int rightBorder;

        int leftRange ;

        int rightRange ; 

        int xdqRange;

        for(int i = 0; i < xdqNum; ++i){

             xdqPosition = xdqList.get(i);

             leftBorder = leftBorders[i];

             rightBorder = rightBorders[i];

             leftRange = Math.abs(xdqPosition - leftBorder);

             rightRange = Math.abs(rightBorder - xdqPosition); 

             xdqRange = Math.max(leftRange, rightRange);

             minRange = Math.min(minRange, xdqRange);

        }

        

        System.out.println(minRange);

    }

#华为机试##华为##笔经#
全部评论
我感觉不要想这么多,直接暴力。用工位位置减去所有消毒水位置,得到这些绝对值的最小值,这就是这个工位的最短距离,得到所有工位的最短距离,取这些最短距离的最大值,就是结果
3 回复
分享
发布于 2021-09-15 21:27
排序、二分、双指针,就可以A
3 回复
分享
发布于 2021-09-15 21:28
滴滴
校招火热招聘中
官网直投
要排序😅
点赞 回复
分享
发布于 2021-09-15 21:21
排序+Treeset,考虑两种情况: 1.在工作站左右边界处得到最小半径  2.在两个消毒装置中间取得半径(取中点,用TreeSet的floor与ceiling分别求出左边与右边的半径) 但我还是只过了60,没考虑到floor或者ceiling为null的情况。
点赞 回复
分享
发布于 2021-09-15 21:30
第二题和第三题哪位大佬有代码吗
2 回复
分享
发布于 2021-09-17 23:08

相关推荐

1 4 评论
分享
牛客网
牛客企业服务