【LeetCode】每日一题 2024_9_18 坐上公交的最晚时间(排序,模拟)

前言

每天和你一起刷 LeetCode 每日一题~

LeetCode 启动!

题目:坐上公交的最晚时间

代码与解题思路

go 复制代码
func latestTimeCatchTheBus(buses []int, passengers []int, capacity int) (ans int) {
    // 核心思路分析:
    // 你可以搭乘公交车的最晚到达公交站时间。你 不能 跟别的乘客同时刻到达。
    // 总结来看就是,需要找最晚的一班车,并且不能和其他乘客同时间到达
    // 换成解题思路来看,就是找到坐最后一辆公交车的最后一个乘客
    // 并找到在他之前的一个时间,插队上车,顶掉最后一个乘客
    
    // 而:数组 buses 和 passengers 不一定是有序的。那就先排序
    slices.Sort(buses)
    slices.Sort(passengers)

    // 先上车,找到前面说的:倒数第二个乘客 // 这里习惯性用 j 了,那就改成 j 吧
    j, c := 0, 0 // j 代表第 j 位乘客,c 代表当前巴士还能载客的数量
    for _, t := range buses { // 枚举巴士到达的时间
        c = capacity // 每一辆新的巴士就能更新成 capacity
        for c > 0 && j < len(passengers) && passengers[j] <= t { // 枚举能做这辆巴士的乘客
            j++ // 乘客+1
            c-- // 载客量-1
        }
    }

    // 现在的 p 代表的就是最后一个上车的乘客,c 代表当前巴士的空位
    if c > 0 { // 如果还有空位
        ans = buses[len(buses)-1] // 先预设在公交车刚到的时候上车(题目要求:最晚到达公交站时间)
        j-- // 这里也需要 j--, 否则可能出现数组下标越界问题
    } else { // 如果坐满了
        ans = passengers[j-1] // 根据我们的分析,找到:最后一个乘客
        j-- // 顶掉最后一个乘客
    }

    // 找一个和别的乘客不同时刻到达的时间
    for j >= 0 && ans == passengers[j] {
        j--
        ans-- 
    }
    return ans
}

核心思路如注释

我最开始也没看懂题目在说些什么,写的真的太难懂了

还好在评论区有一位中译中大师,他的翻译如下: 你患有拖延症和社恐,但很不巧的是你今天必须坐公交回家。 所以,你需要在末班车开走之前,尽量晚的时间,并且不与其他乘客同时到达公交站。

对照这个解释,多看几遍题目和样例,终于恍然大悟

视频实况

【【LeetCode】每日一题 2024_9_18 坐上公交的最晚时间(排序,模拟)】

每天进步一点点

可以和我刷一辈子的每日一题吗?

一题一题,积累起来就是一辈子。

相关推荐
美式请加冰几秒前
简单多状态问题
数据结构·算法·leetcode
计算机安禾4 分钟前
【数据结构与算法】第38篇:图论(二):深度优先搜索(DFS)与广度优先搜索(BFS)
数据结构·算法·矩阵·排序算法·深度优先·图论·宽度优先
佑白雪乐6 分钟前
<LeetCode>二叉树前/中/后/层遍历**递归&&非递归**
算法·leetcode·深度优先
汀、人工智能11 分钟前
[特殊字符] 第56课:在排序数组中查找元素的首末位置
数据结构·算法·数据库架构·图论·bfs·在排序数组中查找元素的首末位置
小O的算法实验室12 分钟前
2026年IEEE TASE,面对突发危险区域的基于强化学习的多无人机路径规划,深度解析+性能实测
算法·无人机·论文复现·智能算法·智能算法改进
AI科技星16 分钟前
全维度相对论推导、光速螺旋时空与北斗 GEO 钟差的统一理论
开发语言·线性代数·算法·机器学习·数学建模
6Hzlia17 分钟前
【Hot 100 刷题计划】 LeetCode 279. 完全平方数 | C++ 动态规划 (完全背包)
c++·leetcode·动态规划
ECT-OS-JiuHuaShan20 分钟前
科学的本来意义,是基于规范的共识逻辑,而非共识方法
人工智能·科技·学习·算法·生活
木子墨51626 分钟前
LeetCode 热题 100 精讲 | 动态规划进阶篇:最大子数组和 · 分割等和子集 · 最长公共子序列 · 打家劫舍 III
数据结构·c++·算法·leetcode·动态规划·力扣
li16709027031 分钟前
第十章:list
c语言·开发语言·数据结构·c++·算法·list·visual studio