当前位置: 首页 > news >正文

最小时间差

        首先可以想到,可以计算出任意两个时间之间的差值,然后比较出最小的,不过这种蛮力方法时间复杂度是O(n^2)。而先将时间列表排序,再计算相邻两个时间的差值,就只需要计算n个差值,而排序阶段时间复杂度通常为O(nlogn),所以优化后的时间复杂度为O(nlogn)。

        不过需要注意的是还需要考虑第一个和最后一个时间点跨越午夜的时间差的大小。并且一天只有1440分钟,如果时间列表大于1440,那么必然有重复的时间点,最小差值即为0。

        

class Solution {public int findMinDifference(List<String> timePoints) {int n = timePoints.size();// 由于一天最多有1440分钟,如果timePoints超过1440个,那么必然有重复的时间点,最小差值为0if (n > 1440) {return 0;}// 将时间点按字符串排序,默认是按HH:MM的字典顺序排序Collections.sort(timePoints);int ans = Integer.MAX_VALUE;// 获取第一个时间点的分钟数int t0Minutes = getMinutes(timePoints.get(0));// 初始化上一个时间点为第一个时间点int preMinutes = t0Minutes;// 从第二个时间点开始,逐个计算与前一个时间点的时间差for (int i = 1; i < n; ++i) {int minutes = getMinutes(timePoints.get(i));// 计算相邻时间点的时间差并保留最小的ans = Math.min(ans, minutes - preMinutes); preMinutes = minutes; // 更新上一个时间点为当前时间点}// 计算第一个和最后一个时间点跨越午夜的时间差ans = Math.min(ans, t0Minutes + 1440 - preMinutes);return ans;}// 将时间点转换为分钟数的方法,比如输入“10:01”返回601public int getMinutes(String t) {return ((t.charAt(0) - '0') * 10 + (t.charAt(1) - '0')) * 60 + ((t.charAt(3) - '0') * 10 + (t.charAt(4) - '0'));}
}

http://www.lryc.cn/news/360768.html

相关文章:

  • 动态SQL IF语句
  • 961题库 北航计算机 操作系统 附答案 选择题形式
  • SylixOS 版本与 RealEvo-IDE 版本对应关系说明
  • linux命令:调试必备工具dmesg
  • 第三届大湾区算力大会丨暴雨开启数字未来新篇
  • SPWM载波调制方式-三电平杂记1
  • 常见攻击类型整理
  • R语言探索与分析-美国房价及其影响因素分析
  • Android14 WMS-窗口添加流程(一)-Client端
  • 【人工智能】第二部分:ChatGPT的架构设计和训练过程
  • Informer
  • 12岁学什么编程机构好:深入剖析与全面指导
  • Day60 柱状图中最大的矩形
  • typescript --object对象类型
  • 如何使用python将多个EXCEL表进行合并
  • 【前端每日基础】day35——HTML5离线存储
  • 动态规划算法:背包问题
  • 新版idea配置git步骤及项目导入
  • 赶紧收藏!2024 年最常见 20道 Kafka面试题(一)
  • unsigned char*和const char*的一些问题
  • 前端知识1-4:性能优化进阶
  • ios 新安装app收不到fcm推送
  • 汽美汽修店管理系统会员小程序的作用是什么
  • 远程自动锁定平面
  • 鸿蒙Ability Kit(程序框架服务)【UIAbility组件与UI的数据同步】
  • 一个完整的springboot项目,我们还需要做什么
  • QT-界面居中管理
  • Python | MATLAB | R 心理认知数学图形模型推断
  • Linux系统tab键无法补齐命令-已解决
  • 数据库之函数、存储过程