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 < 241 <= delayedTime <= 24
提示:
- 使用模运算符来处理到达时间加上延迟时间超过 24 小时的情况。
- 如果到达时间加上延迟时间大于或等于 24,你也可以减去 24 来获得 24 小时制的时间。
解题思路
这是一个简单的数学问题,核心是理解 24 小时制的时间循环。
解题思路:
直接相加法:首先将原到达时间和延迟时间相加,得到总的时间。
处理溢出:由于时间是 24 小时制,当时间 ≥ 24 时需要转换回正确的格式。有两种处理方式:
- 使用模运算:
(arrivalTime + delayedTime) % 24 - 使用条件判断:如果总时间 ≥ 24,则减去 24
- 使用模运算:
边界情况:当计算结果刚好是 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) | 只使用常数级别的额外空间 |