|
40 | 40 |
|
41 | 41 | <!-- 这里可写通用的实现逻辑 -->
|
42 | 42 |
|
| 43 | +首先,遍历时间列表,将其转换为“分钟制”列表 `mins`,比如,对于时间点 `13:14`,将其转换为 `13 * 60 + 14`。 |
| 44 | + |
| 45 | +接着将“分钟制”列表按升序排列,然后将此列表的最小时间 `mins[0]` 加上 `24 * 60` 追加至列表尾部,用于处理最大值、最小值的差值这种特殊情况。 |
| 46 | + |
| 47 | +最后遍历“分钟制”列表,找出相邻两个时间的最小值即可。 |
| 48 | + |
43 | 49 | <!-- tabs:start -->
|
44 | 50 |
|
45 | 51 | ### **Python3**
|
46 | 52 |
|
47 | 53 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
48 | 54 |
|
49 | 55 | ```python
|
50 |
| - |
| 56 | +class Solution: |
| 57 | + def findMinDifference(self, timePoints: List[str]) -> int: |
| 58 | + if len(timePoints) > 24 * 60: |
| 59 | + return 0 |
| 60 | + mins = sorted(int(t[:2]) * 60 + int(t[3:]) for t in timePoints) |
| 61 | + mins.append(mins[0] + 24 * 60) |
| 62 | + res = mins[-1] |
| 63 | + for i in range(1, len(mins)): |
| 64 | + res = min(res, mins[i] - mins[i - 1]) |
| 65 | + return res |
51 | 66 | ```
|
52 | 67 |
|
53 | 68 | ### **Java**
|
54 | 69 |
|
55 | 70 | <!-- 这里可写当前语言的特殊实现逻辑 -->
|
56 | 71 |
|
57 | 72 | ```java
|
| 73 | +class Solution { |
| 74 | + public int findMinDifference(List<String> timePoints) { |
| 75 | + if (timePoints.size() > 24 * 60) { |
| 76 | + return 0; |
| 77 | + } |
| 78 | + List<Integer> mins = new ArrayList<>(); |
| 79 | + for (String t : timePoints) { |
| 80 | + String[] time = t.split(":"); |
| 81 | + mins.add(Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1])); |
| 82 | + } |
| 83 | + Collections.sort(mins); |
| 84 | + mins.add(mins.get(0) + 24 * 60); |
| 85 | + int res = 24 * 60; |
| 86 | + for (int i = 1; i < mins.size(); ++i) { |
| 87 | + res = Math.min(res, mins.get(i) - mins.get(i - 1)); |
| 88 | + } |
| 89 | + return res; |
| 90 | + } |
| 91 | +} |
| 92 | +``` |
| 93 | + |
| 94 | +### **C++** |
| 95 | + |
| 96 | +```cpp |
| 97 | +class Solution { |
| 98 | + public int findMinDifference(List<String> timePoints) { |
| 99 | + if (timePoints.size() > 24 * 60) { |
| 100 | + return 0; |
| 101 | + } |
| 102 | + List<Integer> mins = new ArrayList<>(); |
| 103 | + for (String t : timePoints) { |
| 104 | + String[] time = t.split(":"); |
| 105 | + mins.add(Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1])); |
| 106 | + } |
| 107 | + Collections.sort(mins); |
| 108 | + mins.add(mins.get(0) + 24 * 60); |
| 109 | + int res = 24 * 60; |
| 110 | + for (int i = 1; i < mins.size(); ++i) { |
| 111 | + res = Math.min(res, mins.get(i) - mins.get(i - 1)); |
| 112 | + } |
| 113 | + return res; |
| 114 | + } |
| 115 | +} |
| 116 | +``` |
58 | 117 |
|
| 118 | +### **Go** |
| 119 | +
|
| 120 | +```go |
| 121 | +func findMinDifference(timePoints []string) int { |
| 122 | + if len(timePoints) > 24*60 { |
| 123 | + return 0 |
| 124 | + } |
| 125 | + var mins []int |
| 126 | + for _, t := range timePoints { |
| 127 | + time := strings.Split(t, ":") |
| 128 | + h, _ := strconv.Atoi(time[0]) |
| 129 | + m, _ := strconv.Atoi(time[1]) |
| 130 | + mins = append(mins, h*60+m) |
| 131 | + } |
| 132 | + sort.Ints(mins) |
| 133 | + 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]) |
| 137 | + } |
| 138 | + return res |
| 139 | +} |
| 140 | +
|
| 141 | +func min(a, b int) int { |
| 142 | + if a < b { |
| 143 | + return a |
| 144 | + } |
| 145 | + return b |
| 146 | +} |
59 | 147 | ```
|
60 | 148 |
|
61 | 149 | ### **...**
|
|
0 commit comments