Easy

题目描述

给你一个正整数 arrivalTime 表示火车的到达时间(小时),以及另一个正整数 delayedTime 表示延迟的时间(小时)。

返回火车到达车站的时间。

注意,这个问题中的时间是 24 小时制的。

示例 1:

输入:arrivalTime = 15, delayedTime = 5 
输出:20 
解释:火车的到达时间是 15:00。它延迟了 5 小时。现在它将在 15+5 = 20(20:00)到达。

示例 2:

输入:arrivalTime = 13, delayedTime = 11
输出:0
解释:火车的到达时间是 13:00。它延迟了 11 小时。现在它将在 13+11=24 到达(在 24 小时制中表示为 00:00,所以返回 0)。

约束条件:

  • 1 <= arrivalTime < 24
  • 1 <= delayedTime <= 24

提示:

  • 使用模运算符来处理到达时间加上延迟时间超过 24 小时的情况。
  • 如果到达时间加上延迟时间大于或等于 24,你也可以减去 24 来获得 24 小时制的时间。

解题思路

这是一个简单的数学问题,核心是理解 24 小时制的时间循环。

解题思路:

  1. 直接相加法:首先将原到达时间和延迟时间相加,得到总的时间。

  2. 处理溢出:由于时间是 24 小时制,当时间 ≥ 24 时需要转换回正确的格式。有两种处理方式:

    • 使用模运算:(arrivalTime + delayedTime) % 24
    • 使用条件判断:如果总时间 ≥ 24,则减去 24
  3. 边界情况:当计算结果刚好是 24 时,应该返回 0(表示 00:00)。

算法分析:

  • 模运算法是最简洁优雅的解法,一行代码就能解决问题
  • 条件判断法逻辑更直观,容易理解
  • 两种方法时间和空间复杂度都相同

由于约束条件保证了延迟时间不超过 24 小时,所以最多只会跨越一天,不需要考虑多天的情况。

代码实现

class Solution {
public:
    int findDelayedArrivalTime(int arrivalTime, int delayedTime) {
        return (arrivalTime + delayedTime) % 24;
    }
};
class Solution:
    def findDelayedArrivalTime(self, arrivalTime: int, delayedTime: int) -> int:
        return (arrivalTime + delayedTime) % 24
public class Solution {
    public int FindDelayedArrivalTime(int arrivalTime, int delayedTime) {
        return (arrivalTime + delayedTime) % 24;
    }
}
var findDelayedArrivalTime = function(arrivalTime, delayedTime) {
    return (arrivalTime + delayedTime) % 24;
};

复杂度分析

复杂度类型说明
时间复杂度O(1)只需要进行常数次算术运算
空间复杂度O(1)只使用常数级别的额外空间