LeetCode——1904. 你完成的完整对局数(The Number of Full Rounds You Have Played)[中等]——分析及代码(Java)

博客介绍了LeetCode的一道中等难度问题,涉及时间处理和数学计算。给定开始和结束游戏时间,计算在游戏会话期间完成的完整15分钟对局数。解决方案通过提取时间数据,直接计算完整对局数量,考虑跨天情况,并处理边界条件。代码使用Java实现,具有较高的时间和空间效率。
摘要由CSDN通过智能技术生成

LeetCode——1904. 你完成的完整对局数[The Number of Full Rounds You Have Played][中等]——分析及代码[Java]

一、题目

一款新的在线电子游戏在近期发布,在该电子游戏中,以 刻钟 为周期规划若干时长为 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 不相等

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/the-number-of-full-rounds-you-have-played
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、分析及代码

1. 直接计算

(1)思路

提取进入和退出游戏的时间数据,直接计算完成的完整对局数。

(2)代码

class Solution {
    public int numberOfRounds(String startTime, String finishTime) {
        int sHour = Integer.parseInt(startTime.substring(0, 2)), sMin = Integer.parseInt(startTime.substring(3, 5));//起始小时、分钟
        int fHour = Integer.parseInt(finishTime.substring(0, 2)), fMin = Integer.parseInt(finishTime.substring(3, 5));//结束小时、分钟
        if (fHour < sHour || (fHour == sHour && fMin < sMin))//判断是否通宵
            fHour += 24;
        int ans = (fHour - sHour) * 4;//[起始小时,结束小时)内对局数
        ans -= (sMin + 14) / 15;//减去起始小时中未完整进行的对局数
        ans += fMin / 15;//增加结束小时中完整进行的对局数
        return Math.max(ans, 0);//避免无完整对局时重复相减,造成负数答案
    }
}

(3)结果

执行用时 :0 ms,在所有 Java 提交中击败了 100.00% 的用户;
内存消耗 :36.6 MB,在所有 Java 提交中击败了 100.00% 的用户。
(目前提交用户量不足,暂无排名)

三、其他

暂无。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值