首页 > 其他分享 >2332.坐上公交的最晚时间

2332.坐上公交的最晚时间

时间:2024-09-18 16:04:47浏览次数:9  
标签:passengers 2332 公交车 buses 乘客 pos 坐上 时间 最晚

题目描述:
给你一个下标从 0 开始长度为 n 的整数数组 buses ,其中 buses[i] 表示第 i 辆公交车的出发时间。同时给你一个下标从 0 开始长度为 m 的整数数组 passengers ,其中 passengers[j] 表示第 j 位乘客的到达时间。所有公交车出发的时间互不相同,所有乘客到达的时间也互不相同。

给你一个整数 capacity ,表示每辆公交车 最多 能容纳的乘客数目。

每位乘客都会搭乘下一辆有座位的公交车。如果你在 y 时刻到达,公交在 x 时刻出发,满足 y <= x 且公交没有满,那么你可以搭乘这一辆公交。最早 到达的乘客优先上车。

返回你可以搭乘公交车的最晚到达公交站时间。你 不能 跟别的乘客同时刻到达。

注意:数组 buses 和 passengers 不一定是有序的。

示例 1:

输入:buses = [10,20], passengers = [2,17,18,19], capacity = 2
输出:16
解释:
第 1 辆公交车载着第 1 位乘客。
第 2 辆公交车载着你和第 2 位乘客。
注意你不能跟其他乘客同一时间到达,所以你必须在第二位乘客之前到达。
示例 2:

输入:buses = [20,30,10], passengers = [19,13,26,4,25,11,21], capacity = 2
输出:20
解释:
第 1 辆公交车载着第 4 位乘客。
第 2 辆公交车载着第 6 位和第 2 位乘客。
第 3 辆公交车载着第 1 位乘客和你。

解题思路:
1.对公交发车时间和乘客到达时间进行排序。
2.模拟每班车的发车过程,更新已乘坐的乘客数量。
3.确定最后一班车或最后一个能上车的乘客的时间。
4.逐步减小时间,直到找到最晚能够赶上车的时间。

代码解释:
   // 排序乘客上车的时间
    Arrays.sort(buses);
    Arrays.sort(passengers);
    // 初始化乘客位置索引为0
    int pos = 0;
    // 初始化每辆公交车剩余座位数为0
    int space = 0;

    // 遍历每个公交车的发车时间,当前车还有空位
    for (int arrive : buses) {
        // 初始化每辆车的剩余座位为capacity
        space = capacity;
        //并且还有乘客未上车,并且当前乘客可以在当前车发车前到达,则继续循环
        while (space > 0 && pos < passengers.length && passengers[pos] <= arrive) {
            space--;
            pos++;
        }
    }
    // 这里需要详细解释下为什么要回退一步?
    //    在循环中,每次处理一个乘客时,会检查当前乘客是否可以在当前公交车发车前到达,
    //    如果可以,就会让这个乘客上车,并将 pos 加1,表示处理了这个乘客
    //      假设最后一班车的情况如下:
    //          最后一班车的发车时间为 arrive。
    //          假设最后一个乘客刚好可以赶上这班车,即 passengers[pos] <= arrive。
    //          这时 pos 会加1,表示这个乘客已经处理完了,
    //      但是,我们需要找到的是 最晚 能够赶上车的时间。因此
    //          如果最后一班车还有空位 (space > 0),那么最晚时间就是最后一班车的发车时间 buses[buses.length - 1],
    //          如果最后一班车已经满员 (space <= 0),那么最晚时间就是最后一个能上车的乘客的到达时间 passengers[pos]由于循环结束后 pos 已经指向了下一个乘客,
    //      因此需要将 pos 减1,回退到上一个乘客,这样才能正确地获取最晚时间
    pos--;
    // 条件判断:space > 0 判断最后一班车是否还有空位。
    //         如果 space > 0,说明最后一班车还有空位,那么最晚时间就是最后一班车的发车时间 buses[buses.length - 1]。
    //         如果 space <= 0,说明最后一班车已经满员,那么最晚时间就是最后一个能上车的乘客的到达时间 passengers[pos]
    int lastCatchTime = space > 0 ? buses[buses.length - 1] : passengers[pos];
    // 如果当前位置有效 (pos >= 0) 并且当前乘客的到达时间等于最晚时间,则继续回退 pos 和减少 lastCatchTime,直到找到最晚能够赶上车的时间
    while (pos >= 0 && passengers[pos] == lastCatchTime) {
        pos--;
        lastCatchTime--;
    }

    return lastCatchTime;

标签:passengers,2332,公交车,buses,乘客,pos,坐上,时间,最晚
From: https://www.cnblogs.com/java-cheng/p/18418134

相关文章

  • 算法学习每日一题之2332. 坐上公交的最晚时间:二分答案 & 贪心双指针
    Problem:2332.坐上公交的最晚时间人话题意:你是一个懒惰的人,虽然你要赶公交车,但你想多睡会,恰好你知道每辆车的发车时间buses和每辆车容capacity,和每个乘客乘车的时间passenger,旨在求可以赶上公交车的最晚出发时间。思路一:二分答案求最晚能满足赶上公交的时间,可以发现......
  • 【每日一题】LeetCode 2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)
    【每日一题】LeetCode2332.坐上公交的最晚时间(数组、双指针、二分查找、排序)题目描述给你一个下标从0开始长度为n的整数数组buses,其中buses[i]表示第i辆公交车的出发时间。同时给你一个下标从0开始长度为m的整数数组passengers,其中passengers[j]表示第......
  • 自闭症孩子的语言之旅:最晚几岁会说话的探索与思考
    作为在自闭症学校工作的教育者,我深知自闭症这一神经发展性障碍给孩子们带来的挑战,尤其是他们在语言发展方面的困难。自闭症孩子的语言发展轨迹各不相同,有的孩子可能早早地展现出语言天赋,而有的孩子则可能迟迟不开口。那么,自闭症孩子最晚几岁会说话呢?自闭症的核心症状包括社交......
  • SQL查找最晚入职员工的所有信息
    系列文章目录文章目录系列文章目录前言前言前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。入职最晚的员工信息(不一定只有一条)select*fromemployeesord......
  • #c:键盘输入一个字符串判断它是不是回文 回文:123321
    小小案例仅供参考:/键盘输入一个字符串判断它是不是回文比如:12321这个就是回文#include<stdio.h>#include<string.h>voidtest01(){  charbuf[128]="";  printf("请输入一个字符串:\n");  fgets(buf,sizeof(buf),stdin);  buf[strlen(buf)-1]=0; ......
  • 2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T
    2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为a[i]当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士兵中用时最......
  • 2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T
    2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为a[i]当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士兵中用时最......
  • 2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河 敌军在T
    2023-12-23:用go语言,一支n个士兵的军队正在趁夜色逃亡,途中遇到一条湍急的大河敌军在T的时长后到达河面,没到过对岸的士兵都会被消灭现在军队只找到了1只小船,这船最多能同时坐上2个士兵。当1个士兵划船过河,用时为a[i]当2个士兵坐船同时划船过河时,用时为max(a[j],a[i])两士......
  • java 数组list 找出最早最晚
    //找到最早的小时和最晚的小时,并具体到分钟Optional<LocalTime>earliestTime=adminEventInfoDTOList.stream().map(dto->dto.getCreateTime().toLocalTime()).min(LocalTime::compareTo);Optional<LocalTime......
  • 123321
    <template><a-layoutid="root"style="height:100%;padding:10px;"><a-layout-siderdata-drop="move"id="menu"style="width:20%;padding:10px"><a-rowjustify="space-around&q......