华为4.21笔试

求问第一题——我只能通过27.8%

我的思路就是先排序,然后一个一个的进去累加某一个超限了就拒绝掉
请各位看到的大佬解释一下:我为什么错了

package HuaWei;
import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Scanner;
public class Reserve {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();// 预定电话数
        int m = sc.nextInt();// 总共能够容纳的人数
        PriorityQueuequeue = new PriorityQueue(new Comparator() {
            @Override
            public int compare(Order o1, Order o2) {
                return o1.startTime - o2.startTime;
            }
        });
        for(int i = 0; i < n; i++){
            int startTime = sc.nextInt();
            int endTime = sc.nextInt();
            int personNum = sc.nextInt();
            Order order = new Order(startTime, endTime, personNum);
            queue.add(order);
        }
        int[] nums = new int[24];
        while(!queue.isEmpty()){
            Order order = queue.poll();
            reserve(nums, order, m);
        }
        for(int i = 0; i < nums.length; i++){
            if(i == nums.length - 1){
                System.out.print(nums[i]);
            }
            else {
                System.out.print(nums[i] + " ");
            }
        }
    }
    private static void reserve(int[] nums, Order orderA, int limit){
        int start = orderA.startTime;
        int end = orderA.endTime;
        for(int i = start; i < end; i++){
            if(orderA.personNum + nums[i] > limit){
                return;
            }
        }
        // 没有return的话表明可以接受该订单
        for(int i = start; i < end; i++){
            nums[i] += orderA.personNum;
        }
    }
}
class Order{
    public int startTime;
    public int endTime;
    public int personNum;
    public Order(int startTime, int endTime, int personNum) {
        this.startTime = startTime;
        this.endTime = endTime;
        this.personNum = personNum;
    }
}
/*
4 40
9 12 5
8 11 10
14 16 30
15 17 20
*/
#华为##笔经#
全部评论
楼主你好,请问你是什么岗位?开发的话,是Java方向还是C++方向?或者其他语言方向~
点赞 回复 分享
发布于 2021-04-21 21:51
因为题目不需要你排序,就从头顺下来超了就拒绝
点赞 回复 分享
发布于 2021-04-21 21:54
排序干啥,那顺序就是订单顺序,先满足先预定的,不是先满足开始时间最早的
点赞 回复 分享
发布于 2021-04-21 22:36
我跟你一样,先排序,然后也只通过0.28,这题目根本就不能排序。
点赞 回复 分享
发布于 2021-04-22 08:16
不可以排序
点赞 回复 分享
发布于 2021-04-22 08:46
大佬,其他两道做出来了吗
点赞 回复 分享
发布于 2021-04-22 09:11
import java.util.*; public class Main{ public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int m=in.nextInt(); int[][]a=new int[3][n]; int[]b={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; if(n>=1&&n<=100&&m>=30&&m<=100){ for(int i=0;i<n;i++){ a[0][i]=in.nextInt(); a[1][i]=in.nextInt(); a[2][i]=in.nextInt(); if(a[0][i]>=0&&a[0][i]<=23&&a[1][i]>=1&&a[1][i]<=24&&a[2][i]>=1&&a[2][i]<=100){ for(int j=a[0][i];j<a[1][i];j++){ b[j]=b[j]+a[2][i]; if(b[j]>m){ for(int l=a[0][i];l<=j;l++){ b[l]=b[l]-a[2][i]; } break; } } } else{ System.out.println("第"+i+"行输入错误"); } } } else{ System.out.println("输入错误"); } for(int y=0;y<24;y++){ System.out.print(b[y]+" "); } } }
点赞 回复 分享
发布于 2021-04-22 15:09

相关推荐

小红书 后端开发 总包n+8w+期权
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务