39
39
40
40
<!-- 这里可写通用的实现逻辑 -->
41
41
42
- 我们注意到,时间点最多只有 ` 24 * 60 ` 个,因此,当 timePoints 长度超过 ` 24 * 60 ` ,说明有重复的时间点,提前返回 0。
42
+ ** 方法一:排序 **
43
43
44
- 接下来:
44
+ 我们注意到,时间点最多只有 $24 \times 60$ 个,因此,当 $timePoints$ 长度超过 $24 \times 60$,说明有重复的时间点,提前返回 $0$。
45
45
46
- 首先,遍历时间列表 ,将其转换为“分钟制”列表 ` mins ` ,比如,对于时间点 ` 13:14 ` ,将其转换为 ` 13 * 60 + 14 ` 。
46
+ 接下来,我们首先遍历时间列表 ,将其转换为“分钟制”列表 $ mins$ ,比如,对于时间点 ` 13:14 ` ,将其转换为 $ 13 \times 60 + 14$ 。
47
47
48
- 接着将“分钟制”列表按升序排列,然后将此列表的最小时间 ` mins[0] ` 加上 ` 24 * 60 ` 追加至列表尾部,用于处理最大值、最小值的差值这种特殊情况。
48
+ 接着将“分钟制”列表按升序排列,然后将此列表的最小时间 $ mins[ 0] $ 加上 $ 24 \times 60$ 追加至列表尾部,用于处理最大值、最小值的差值这种特殊情况。
49
49
50
50
最后遍历“分钟制”列表,找出相邻两个时间的最小值即可。
51
51
52
+ 时间复杂度 $O(n \times \log n)$,空间复杂度 $O(n)$。其中 $n$ 为时间点个数。
53
+
52
54
<!-- tabs:start -->
53
55
54
56
### ** Python3**
@@ -62,10 +64,7 @@ class Solution:
62
64
return 0
63
65
mins = sorted (int (t[:2 ]) * 60 + int (t[3 :]) for t in timePoints)
64
66
mins.append(mins[0 ] + 24 * 60 )
65
- res = mins[- 1 ]
66
- for i in range (1 , len (mins)):
67
- res = min (res, mins[i] - mins[i - 1 ])
68
- return res
67
+ return min (b - a for a, b in pairwise(mins))
69
68
```
70
69
71
70
### ** Java**
@@ -85,11 +84,11 @@ class Solution {
85
84
}
86
85
Collections . sort(mins);
87
86
mins. add(mins. get(0 ) + 24 * 60 );
88
- int res = 24 * 60 ;
87
+ int ans = 1 << 30 ;
89
88
for (int i = 1 ; i < mins. size(); ++ i) {
90
- res = Math . min(res , mins. get(i) - mins. get(i - 1 ));
89
+ ans = Math . min(ans , mins. get(i) - mins. get(i - 1 ));
91
90
}
92
- return res ;
91
+ return ans ;
93
92
}
94
93
}
95
94
```
@@ -100,17 +99,20 @@ class Solution {
100
99
class Solution {
101
100
public:
102
101
int findMinDifference(vector<string >& timePoints) {
103
- if (timePoints.size() > 24 * 60)
102
+ if (timePoints.size() > 24 * 60) {
104
103
return 0;
104
+ }
105
105
vector<int > mins;
106
- for (auto t : timePoints)
106
+ for (auto& t : timePoints) {
107
107
mins.push_back(stoi(t.substr(0, 2)) * 60 + stoi(t.substr(3)));
108
+ }
108
109
sort(mins.begin(), mins.end());
109
110
mins.push_back(mins[ 0] + 24 * 60);
110
- int res = 24 * 60;
111
- for (int i = 1; i < mins.size(); ++i)
112
- res = min(res, mins[ i] - mins[ i - 1] );
113
- return res;
111
+ int ans = 1 << 30;
112
+ for (int i = 1; i < mins.size(); ++i) {
113
+ ans = min(ans, mins[ i] - mins[ i - 1] );
114
+ }
115
+ return ans;
114
116
}
115
117
};
116
118
```
@@ -131,11 +133,11 @@ func findMinDifference(timePoints []string) int {
131
133
}
132
134
sort.Ints(mins)
133
135
mins = append(mins, mins[0]+24*60)
134
- res := 24 * 60
135
- for i := 1; i < len( mins); i++ {
136
- res = min(res, mins[i] -mins[i-1 ])
136
+ ans := 1 << 30
137
+ for i, x := range mins[1:] {
138
+ ans = min(ans, x -mins[i])
137
139
}
138
- return res
140
+ return ans
139
141
}
140
142
141
143
func min(a, b int) int {
@@ -146,6 +148,27 @@ func min(a, b int) int {
146
148
}
147
149
```
148
150
151
+ ### ** TypeScript**
152
+
153
+ ``` ts
154
+ function findMinDifference(timePoints : string []): number {
155
+ if (timePoints .length > 24 * 60 ) {
156
+ return 0 ;
157
+ }
158
+ const mins: number [] = timePoints .map (timePoint => {
159
+ const [hour, minute] = timePoint .split (' :' ).map (num => parseInt (num ));
160
+ return hour * 60 + minute ;
161
+ });
162
+ mins .sort ((a , b ) => a - b );
163
+ mins .push (mins [0 ] + 24 * 60 );
164
+ let ans = 1 << 30 ;
165
+ for (let i = 1 ; i < mins .length ; ++ i ) {
166
+ ans = Math .min (ans , mins [i ] - mins [i - 1 ]);
167
+ }
168
+ return ans ;
169
+ }
170
+ ```
171
+
149
172
### ** ...**
150
173
151
174
```
0 commit comments