题目描述
539.给定一个 24 小时制(小时:分钟 “HH:MM”)的时间列表,找出列表中任意两个时间的最小时间差并以分钟数表示。
示例
示例 1:
输入:timePoints = [“23:59”,“00:00”]
输出:1
示例 2:
输入:timePoints = [“00:00”,“23:59”,“00:00”]
输出:0
方法
- 开始我们尝试用两个for循环,两两比较所有的数的大小,然后取最小,但发现时间超出了限制。
- 后面我们尝试对数先进行排序。这样比大小的时候一个for循环就可以完成。在对收尾进行比较时,我们将最小的数加1440(24*60)放到列表末尾进行比较,避免了收尾最小时,其值的丢失。
总代码
- 方法一:O(n^2)超出时间限制
class Solution:
def findMinDifference(self, timePoints: List[str]) -> int:
convert_min = []
for i in timePoints:
i = int(i[0:2]) * 60 + int(i[3:5])
convert_min.append(i)
n = len(convert_min)
min = float('inf')
def abs_a(a):
if a > 0:
return a
else:
return -a
for i in range(n):
for j in range(i+1, n):
a = abs_a(convert_min[i] - convert_min[j])
if a > 720:
a = 1440 - a
if min > a:
min = a
return min
- 方法二:排序 + 比大小
class Solution:
def findMinDifference(self, timePoints: List[str]) -> int:
convert_min = []
for i in timePoints:
i = int(i[0:2]) * 60 + int(i[3:5])
convert_min.append(i)
min = float('inf')
convert_min.sort()
convert_min.append(convert_min[0]+1440)
n = len(convert_min)
for i in range(1,n):
a = convert_min[i] - convert_min[i-1]
if min > a:
min = a
return min