539. Minimum Time Difference 数列内最小时间差
Given a list of 24-hour clock time points in “Hour:Minutes” format, find the minimum minutes difference between any two time points in the list.
Example 1:12Input: ["23:59","00:00"]Output: 1
Note:
The number of time points in the given list is at least 2 and won’t exceed 20000.
The input time is legal and ranges from 00:00 to 23:59.
SOL
没看到note里面就开始想题,还以为是只有两个值的我写到一半发现写错,简直崩溃……(所以一定要认 真 审 题
解法1
复杂度: nlog(n) 主要是sort的复杂度
思路:
- 提取出时间后直接变成分钟数,分钟差>1260时直接给小时间+2460,再做大时间-小时间的减法
- 只需要对两个相邻时间进行减法,因为需要的是最短时间=!=,这个trick我竟然是看了答案才想到,还以为要分类计算啥的,说明有时候想的太复杂了(
或者就是傻
总结:
- 认真审题
- 时间(list)向数字的转换
- 集合(各种list)的使用还是要加强,不能每个方法都要现搜
一些小的注意点:
- 在生成ArrayList的时候,ArrayList
是错误的, https://goo.gl/g9vo6m 指出应使用这种格式
|
|
(注意左侧是list,<>里面是Integer,右边的
- 分割String时使用的split()方法
- arrayList获取数组长度时用的是size()非length(); 获取arraylist元素使用.get()
|
|
解法2
解法2 (https://goo.gl/ptB4F9 )就更简洁一些了. 因为时间数值只有24*60即1440个, 所以建立一个1440的boolean数组来标示是否出现各个时间点即可 (斯国一.jpg
复杂度: O(n)
注意:
- 别忘了处理重复值的情况!!!(眼神放空
- 比较大小用Math.min/max更配哦(((
- length: array用(int[], string[]);
length(): String相关Obj用(String, StringBuilder, etc);
size(): Collection Obj用(ArrayList, Set, etc) via https://goo.gl/arGP91
|
|