华为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
*/
#华为##笔经#
全部评论
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
大佬,其他两道做出来了吗
点赞 回复 分享
发布于 2021-04-22 09:11
不可以排序
点赞 回复 分享
发布于 2021-04-22 08:46
我跟你一样,先排序,然后也只通过0.28,这题目根本就不能排序。
点赞 回复 分享
发布于 2021-04-22 08:16
排序干啥,那顺序就是订单顺序,先满足先预定的,不是先满足开始时间最早的
点赞 回复 分享
发布于 2021-04-21 22:36
因为题目不需要你排序,就从头顺下来超了就拒绝
点赞 回复 分享
发布于 2021-04-21 21:54
楼主你好,请问你是什么岗位?开发的话,是Java方向还是C++方向?或者其他语言方向~
点赞 回复 分享
发布于 2021-04-21 21:51

相关推荐

头像
05-16 12:47
已编辑
中国地质大学(武汉) Java
你出生在农村,与其它农村小孩子无异小学时你对成绩没有概念,只感觉上课不听课也是无聊,只知道不写完作业会被老师罚站一到考试,自己成绩总是名列靠前,即使偶尔落后,你也从不在意中学时你觉得课本的东西很简单,随便学学就会了,并没有大量刷题你总是想不通,那些所谓的数学物理中难题,明明是在送分,为什么你的同学总是想不出解题方法高中时这三年你过的不容易,晚睡早起,给了自己很多压力.但是你也发现自己是有些小聪明的,你感觉班里有些同学很刻苦,但成绩比你差远了。那些数学题和物理题的陷阱,同学一遍遍踩坑,但是你总能发现并避开它们.“为了父母的期盼,为了恩师的厚望,为了天赐的智慧,为了青春的理想......”“天行健...
创作助手_刘北:其实,这种已经是神童级别的了,不费吹灰之力就能拿到自己想要的东西,就像机器按照程序走了一遍,就像我小时候看爱情公寓,觉得他们都很惨,几个人只能挤在一个房间里合租,但是好在他们有一群非常好的朋友,随着时间的推移,慢慢长大了,在看爱情公寓的时候,觉得他们都很厉害,博士、留学生、***、电台公子,数学天才,任何一个都是我可望而不可即的,更别说可以在异地认识一群更好的朋友了,所以呢,人还是要自给自足,满足当下,不要攀比,意气风发的且有理想的18岁少年永远都存在,只不过随着时间的推移他被你包裹在了洋葱的最深处。
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

更多
牛客网
牛客企业服务