comments | difficulty | edit_url | rating | source | tags | ||
---|---|---|---|---|---|---|---|
true |
中等 |
1498 |
第 246 场周赛 Q2 |
|
一款新的在线电子游戏在近期发布,在该电子游戏中,以 刻钟 为周期规划若干时长为 15 分钟 的游戏对局。这意味着,在 HH:00
、HH:15
、HH:30
和 HH:45
,将会开始一个新的对局,其中 HH
用一个从 00
到 23
的整数表示。游戏中使用 24 小时制的时钟 ,所以一天中最早的时间是 00:00
,最晚的时间是 23:59
。
给你两个字符串 startTime
和 finishTime
,均符合 "HH:MM"
格式,分别表示你 进入 和 退出 游戏的确切时间,请计算在整个游戏会话期间,你完成的 完整对局的对局数 。
- 例如,如果
startTime = "05:20"
且finishTime = "05:59"
,这意味着你仅仅完成从05:30
到05:45
这一个完整对局。而你没有完成从05:15
到05:30
的完整对局,因为你是在对局开始后进入的游戏;同时,你也没有完成从05:45
到06:00
的完整对局,因为你是在对局结束前退出的游戏。
如果 finishTime
早于 startTime
,这表示你玩了个通宵(也就是从 startTime
到午夜,再从午夜到 finishTime
)。
假设你是从 startTime
进入游戏,并在 finishTime
退出游戏,请计算并返回你完成的 完整对局的对局数 。
示例 1:
输入:startTime = "12:01", finishTime = "12:44" 输出:1 解释:你完成了从 12:15 到 12:30 的一个完整对局。 你没有完成从 12:00 到 12:15 的完整对局,因为你是在对局开始后的 12:01 进入的游戏。 你没有完成从 12:30 到 12:45 的完整对局,因为你是在对局结束前的 12:44 退出的游戏。
示例 2:
输入:startTime = "20:00", finishTime = "06:00" 输出:40 解释:你完成了从 20:00 到 00:00 的 16 个完整的对局,以及从 00:00 到 06:00 的 24 个完整的对局。 16 + 24 = 40
示例 3:
输入:startTime = "00:00", finishTime = "23:59" 输出:95 解释:除最后一个小时你只完成了 3 个完整对局外,其余每个小时均完成了 4 场完整对局。
提示:
startTime
和finishTime
的格式为HH:MM
00 <= HH <= 23
00 <= MM <= 59
startTime
和finishTime
不相等
我们可以将输入的字符串转换为分钟数
然后我们将
时间复杂度
class Solution:
def numberOfRounds(self, loginTime: str, logoutTime: str) -> int:
def f(s: str) -> int:
return int(s[:2]) * 60 + int(s[3:])
a, b = f(loginTime), f(logoutTime)
if a > b:
b += 1440
a, b = (a + 14) // 15, b // 15
return max(0, b - a)
class Solution {
public int numberOfRounds(String loginTime, String logoutTime) {
int a = f(loginTime), b = f(logoutTime);
if (a > b) {
b += 1440;
}
return Math.max(0, b / 15 - (a + 14) / 15);
}
private int f(String s) {
int h = Integer.parseInt(s.substring(0, 2));
int m = Integer.parseInt(s.substring(3, 5));
return h * 60 + m;
}
}
class Solution {
public:
int numberOfRounds(string loginTime, string logoutTime) {
auto f = [](string& s) {
int h, m;
sscanf(s.c_str(), "%d:%d", &h, &m);
return h * 60 + m;
};
int a = f(loginTime), b = f(logoutTime);
if (a > b) {
b += 1440;
}
return max(0, b / 15 - (a + 14) / 15);
}
};
func numberOfRounds(loginTime string, logoutTime string) int {
f := func(s string) int {
var h, m int
fmt.Sscanf(s, "%d:%d", &h, &m)
return h*60 + m
}
a, b := f(loginTime), f(logoutTime)
if a > b {
b += 1440
}
return max(0, b/15-(a+14)/15)
}
function numberOfRounds(startTime: string, finishTime: string): number {
const f = (s: string): number => {
const [h, m] = s.split(':').map(Number);
return h * 60 + m;
};
let [a, b] = [f(startTime), f(finishTime)];
if (a > b) {
b += 1440;
}
return Math.max(0, Math.floor(b / 15) - Math.ceil(a / 15));
}