当前位置: 首页 > article >正文

LeetCode 2332.坐上公交的最晚时间 (双指针 + 贪心)

给你一个下标从 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 位乘客和你。

提示:

  • n == buses.length
  • m == passengers.length
  • 1 <= n, m, capacity <= 105
  • 2 <= buses[i], passengers[i] <= 109
  • buses 中的元素 互不相同 
  • passengers 中的元素 互不相同 。

可以想到的是贪心,尽量去做最后一辆车,那么可以定义一个idx,然后去遍历整个数组,尽量让每辆车都坐满capacity人,如果最后那辆坐不满capacity人,那么答案就是最后那辆车的发车时间。做的满的话,idx就从后往前走,一直到能插进去上车即可

class Solution {
public:
    int latestTimeCatchTheBus(vector<int>& buses, vector<int>& passengers, int capacity) {
        int n = buses.size(),m = passengers.size();
        sort(buses.begin(),buses.end());
        sort(passengers.begin(),passengers.end());
        // for(auto x : buses) cout << x << " ";
        // cout << endl;
        // for(auto x : passengers) cout << x << " ";
        // cout << endl;

        int idx = 0;
        int c;
        for(int i = 0;i < n;i ++){
            int k = buses[i];
            c = capacity;
            for(int j = 0;j < m && idx < m && c;j ++){
                if(passengers[idx] > k) break;
                idx ++, c --;
            }
        }

        idx --;
        // cout << idx << " " << c << endl;
        int res = (c ? buses[n - 1] : passengers[idx]);
        // cout << res << endl;
        while(idx >= 0 && res == passengers[idx]){
            idx --,res --;
        }
        return res;
    }
};

加油


http://www.kler.cn/news/309709.html

相关文章:

  • kubernetes架构
  • 上调铁矿石产量预期后,淡水河谷股价能否重振?
  • MUNIK谈ASPICE系列专题分享(九)ASPICE对项目需求管理的实践分享
  • 2.Springboot之ApplicationContextListenerConfig
  • 【四范式】浅谈NLP发展的四个范式
  • 怀揣热爱 躬耕不惫 ——记新宁县金石镇水头学校朱文文老师
  • 雷池waf:三步轻松卸载指南
  • Redis - 集群篇 - 集群模式
  • 系统安全设计规范(Word完整版)
  • 如何用麦肯锡方法分析问题和解决问题?
  • navicate连接oracle数据库probable oracle net admin error
  • C++:内部类,匿名对象,操作符new与delete
  • uniapp 做一个查看图片的组件,图片可缩放移动
  • python中Web API 框架
  • Html css样式总结
  • 使用CUBE_MX实现STM32 DMA 功能(存储器到存储器)
  • Miracast/WifiDisplay开发相关的深入调研分析-android投屏实战开发
  • 字幕编辑用什么软件好?盘点国内外7款视频加字幕软件,简单高效!
  • [SWPU2019]Web11
  • Java文件输入输出及其常用类
  • Nginx反向代理出现502 Bad Gateway问题的解决方案
  • 如何使用 LangChain 的内置工具和工具包:深入探讨与实践指南
  • [Web安全 网络安全]-文件包含漏洞
  • 八股(8)——Spring,SpringBoot
  • 虾皮商品数据api全解析:高效获取,精准运营新利器
  • 记八月十五灵隐寺一游
  • presto/trino native 向量化 大数据计算引擎
  • MySQL之库和表操作
  • Rust 所有权 简介
  • 硬件基础知识