38
38
39
39
<!-- 这里可写通用的实现逻辑 -->
40
40
41
+ ** 方法一:排序**
42
+
43
+ 我们将会议按照开始时间进行排序,然后遍历排序后的会议,如果当前会议的开始时间小于前一个会议的结束时间,则说明两个会议有重叠,返回 ` false ` 即可。
44
+
45
+ 遍历结束后,返回 ` true ` 。
46
+
47
+ 时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 为会议数量。
48
+
41
49
<!-- tabs:start -->
42
50
43
51
### ** Python3**
47
55
``` python
48
56
class Solution :
49
57
def canAttendMeetings (self , intervals : List[List[int ]]) -> bool :
50
- intervals.sort(key = lambda x : x[0 ])
51
- for i in range (len (intervals) - 1 ):
52
- if intervals[i][1 ] > intervals[i + 1 ][0 ]:
53
- return False
54
- return True
58
+ intervals.sort()
59
+ return all (a[1 ] <= b[0 ] for a, b in pairwise(intervals))
55
60
```
56
61
57
62
### ** Java**
@@ -61,12 +66,65 @@ class Solution:
61
66
``` java
62
67
class Solution {
63
68
public boolean canAttendMeetings (int [][] intervals ) {
64
- Arrays . sort(intervals, Comparator . comparingInt(a - > a[0 ]));
65
- for (int i = 0 , n = intervals. length; i < n - 1 ; ++ i) {
66
- if (intervals[i][1 ] > intervals[i + 1 ][0 ]) return false ;
69
+ Arrays . sort(intervals, (a, b) - > a[0 ] - b[0 ]);
70
+ for (int i = 1 ; i < intervals. length; ++ i) {
71
+ var a = intervals[i - 1 ];
72
+ var b = intervals[i];
73
+ if (a[1 ] > b[0 ]) {
74
+ return false ;
75
+ }
76
+ }
77
+ return true ;
78
+ }
79
+ }
80
+ ```
81
+
82
+ ### ** C++**
83
+
84
+ ``` cpp
85
+ class Solution {
86
+ public:
87
+ bool canAttendMeetings(vector<vector<int >>& intervals) {
88
+ sort(intervals.begin(), intervals.end(), [ ] (const vector<int >& a, const vector<int >& b) {
89
+ return a[ 0] < b[ 0] ;
90
+ });
91
+ for (int i = 1; i < intervals.size(); ++i) {
92
+ if (intervals[ i] [ 0 ] < intervals[ i - 1] [ 1 ] ) {
93
+ return false;
94
+ }
67
95
}
68
96
return true;
69
97
}
98
+ };
99
+ ```
100
+
101
+ ### **Go**
102
+
103
+ ```go
104
+ func canAttendMeetings(intervals [][]int) bool {
105
+ sort.Slice(intervals, func(i, j int) bool {
106
+ return intervals[i][0] < intervals[j][0]
107
+ })
108
+ for i := 1; i < len(intervals); i++ {
109
+ if intervals[i][0] < intervals[i-1][1] {
110
+ return false
111
+ }
112
+ }
113
+ return true
114
+ }
115
+ ```
116
+
117
+ ### ** TypeScript**
118
+
119
+ ``` ts
120
+ function canAttendMeetings(intervals : number [][]): boolean {
121
+ intervals .sort ((a , b ) => a [0 ] - b [0 ]);
122
+ for (let i = 1 ; i < intervals .length ; ++ i ) {
123
+ if (intervals [i ][0 ] < intervals [i - 1 ][1 ]) {
124
+ return false ;
125
+ }
126
+ }
127
+ return true ;
70
128
}
71
129
```
72
130
0 commit comments