7.21华为机试第一题review

/*只需要关注结束的时间,按照时间排序,以开始时间为第一权重,结束时间为第二权重,从小到大排序
然后判断当前乘客开始时间是否小于上一位乘客的结束时间,如果小于,需要一辆新的出租车,如果不小于,更新pre,(更新为最大值)
贪心
*/
public class Main {
    //1、第一题
    //求重叠区间的最多个数(也不太算,不知道怎么描述)
    public static void main(String[] args) {
        //输出参数3个
        //第一个参数表示上车时刻,第二个参数上次的站点,第三个参数下车的站点
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        int K = scanner.nextInt();

        Nodes[] nodes = new Nodes[K];
        for (int i = 0; i < K; i++) {
            nodes[i] = new Nodes();
            nodes[i].start = scanner.nextInt();

            int num1 = scanner.nextInt();
            int num2 = scanner.nextInt();

           if (num1 == num2){
               //不处理
               //nodes[i] = null;
               //处理一下,要不然给后面埋坑
               nodes[i].end = nodes[i].start;
               continue;
           }else {
               nodes[i].end = Math.min((num2 - num1),N - (num2 - num1)) * 5 + nodes[i].start;
           }
        }

        //对数据进行排序,按照开始时间为第一权重,结束时间为第二权重排序
        Arrays.sort(nodes,0,K,new MyCmp());//又学到了数组可以这样排序

        //开始比较,如果当前乘客的开始时间小于上一个乘客结束时间,需要新的出租车,不小于,则取最大值(开始时间)(缩小范围)
        int i = 0;
        int pre = nodes[0].start;
        int ans = 0;
        while (i < K && nodes[i].start == nodes[i].end) i++;//不处理,直接忽略
        if (i < K){
            ans++;//先肯定有一辆出租车
            pre = nodes[i].start;//重置开始位置
        }
        for (;i < K;i++){
            if (nodes[i].start == nodes[i].end) continue;//忽略
            if (nodes[i].start < pre){
                ans++;//需要新的出租车
                pre = nodes[i].end;
            }else {
                //更新
                pre = Math.max(pre,nodes[i].end);
            }
        }
        System.out.println(ans);
    }
}
class Nodes{
    int start;
    int end;
}
class MyCmp implements Comparator<Nodes>{
    @Override
    public int compare(Nodes o1, Nodes o2) {
        if (o1.start == o2.start){
            return o1.end - o2.end;
        }
        return o1.start - o2.start;
    }
}

#华为机试##学习路径#
全部评论
给一串数, 第一行第一个是站台数 , 第二个是乘客数, 第二行第一个是第一个乘客上车时间, 第二行第二个是上车站台, 第二行第三个是下车站台, 之后有几行看有几个乘客。 问最大同时几个车在跑
2 回复 分享
发布于 2021-07-23 01:19
这是我的方法😂,各位大神看一下。我的思路就是将每个乘客起始时间和结束时间写到一个list里,然后根据起始时间进行排序,可以用lambda x:x[0]。然后遍历,如果第一个乘客结束时间大于第二个乘客的结束时间,count+=1。然后再一个for判断第i个乘客的结束时间和后续第j个乘客的起始时间,如果第i个乘客小于其中某个乘客的起始时间,则count-=1。
1 回复 分享
发布于 2021-07-23 01:57
题目是什么?
点赞 回复 分享
发布于 2021-07-22 23:31
要不要考虑下车站点小于上车站点的情况?
点赞 回复 分享
发布于 2021-07-23 17:36
请教大佬。看到有人说有例子里乘客数是3,但是只有两行乘客信息输入。请问这种情况是怎么解决的
点赞 回复 分享
发布于 2021-07-24 15:01
请问华为用的是什么平台,是牛客网还是他们说的那个时习知?
点赞 回复 分享
发布于 2021-07-26 09:16
咋感觉不太对啊 不是要求区间内最大重叠数么 楼主这个代码ac没有
点赞 回复 分享
发布于 2021-07-30 00:59
这个输入是怎么读的第二行啊,全是nextInt
点赞 回复 分享
发布于 2021-07-31 07:55
华为这个要处理输入输出吗,赛码网那输入输出给我整麻了
点赞 回复 分享
发布于 2021-08-01 16:40
感觉你这个代码不太对啊 ,题目原意是最多有几辆车同时在跑,你这个写的好像是判断发生了几次重叠???感觉怪怪的
点赞 回复 分享
发布于 2021-08-03 17:36
美团在职学长送内推福利 内推优势:免简历筛选,直通笔试,全流程跟踪,提供答疑咨询 内推途径 一、移动端https://campus.meituan.com/bole/wechat?staffSsoId=5430873&appKey=hiring-campus-portal投递简历 二、PC端美团官网投递:https://campus.meituan.com/ 内推码:pVDJhsq 注意内推码前后不要有空格 面向人群:2022届海内外院校应届毕业生(在2021年11月-2022年10月期间毕业) 投递时间:即日起至2021年10月14日24:00(北京时间)建议大家早投递,越往后HC越少 岗位:技术类、零售类、产品类、运营类、设计类、市场职能类、销售相关类 base:北京、上海、成都、深圳、厦门、广州、武汉、扬州、石家庄等 欢迎大家加入QQ群:540965327 有任何问题可以在群里交流
点赞 回复 分享
发布于 2021-08-05 14:05

相关推荐

工作基本定了,比较满意。这深度学习真是难搞啊,论文看不懂,代码看不懂,不会改,创新点???&nbsp;还有一个月中期,怎么搞,已经抑郁了,没有小论文要求,我真是非常幸运了,不然就我这科研能力…………&nbsp;感觉自己对自己失去信心,无时无刻不在否定自己取得一些成绩都是运气好罢了,真的能顺利毕业吗?严重内耗、无力感爆棚啊…………
AI牛可乐:哎呀,听起来你最近压力好大呀,毕业论文和工作的双重压力一定让你感觉像是背了两座山呢。深度学习确实挺复杂的,就像是要在一片迷雾中找到出路一样。但是,你已经很棒了,工作都定好了,这是很大的成就呢! 论文的事情,别太担心。每个人都有看不懂代码和论文的时候,这是正常的。至于创新点嘛,有时候灵感就像小猫一样,需要一点一点地哄出来的。你可以先试试把你看过的资料整理一下,说不定就能找到新的思路呢。 中期答辩前,你可以列个计划,一步一步来,把大问题分解成小问题,一点一点克服。记得,你不是一个人在战斗,你的导师、同学都是你的战友哦。 至于信心嘛,别否定自己,每个人都会有低谷的时候。你已经取得的成绩,都是你实力的体现。毕业不是问题,只要你不放弃,就一定能顺利走过去的。加油哦,我相信你可以的! 对了,如果你愿意的话,可以点击我的头像,我们私信聊,也许我能帮你出出主意,或者就是简单地聊聊天,分散一下你的注意力也好呀。🐮💪🌟
点赞 评论 收藏
分享
1 33 评论
分享
牛客网
牛客企业服务