# **Leetcode筆記(Meeting Rooms)**
:::info
:information_source: 題目 : Meeting Rooms, 類型 : interval , 等級 : easy
日期 : 2023/04/17,2023/05/06,2023/07/26
:::
lintcode
https://www.lintcode.com/problem/920/
### 嘗試
不大確定要怎麼sort
```python
"""
Definition of Interval:
class Interval(object):
def __init__(self, start, end):
self.start = start
self.end = end
"""
class Solution:
"""
@param intervals: an array of meeting time intervals
@return: if a person could attend all meetings
"""
def can_attend_meetings(self, intervals: List[Interval]) -> bool:
for i in range(len(intervals) - 1):
if intervals[i].end > intervals[i + 1].start:
return False
return True
```
2023/05/06
```python
錯誤語法
intervals.sort(key = lambda x : x.start)
沒有處理到是空的情況,導致顯示list index out of range
if not intervals: return True
class Solution:
"""
@param intervals: an array of meeting time intervals
@return: if a person could attend all meetings
"""
def can_attend_meetings(self, intervals: List[Interval]) -> bool:
intervals.sort(key=lambda x: x.start)
if not intervals:
return True
pre_end = intervals[0].end
for i in range(1, len(intervals)):
if intervals[i].start < pre_end:
return False
pre_end = intervals[i].end
return True
```
2023/07/26
先sort,如果x的結尾大於x + 1的開頭,則有重疊
```python
1.newInter = sorted(intervals, key=lambda Interval: Interval.start)
2.intervals.sort(key=lambda x: x.start)
class Solution:
def can_attend_meetings(self, intervals: List[Interval]) -> bool:
if not intervals:
return True
newInter = sorted(intervals, key=lambda Interval: Interval.start)
lastEnd = newInter[0].end
for i in newInter[1 : ]:
if lastEnd > i.start:
return False
else:
lastEnd = i.end
return True
```
---
### **優化**
这个函数的时间复杂度为$O(n\log n)$,这是因为函数中有一个排序操作,排序后,只需要遍历一遍会议列表,检查相邻的会议是否有时间冲突即可,这一步操作的时间复杂度为 $O(n)$。因此,总的时间复杂度为 $O(n\log n)$。
空间复杂度取决于排序算法的实现方式。如果使用的是原地排序算法,那么空间复杂度为 $O(1)$;如果使用的是非原地排序算法,那么空间复杂度将取决于排序算法的实现方式,通常为 $O(n)$ 或 $O(\log n)$。由于 Python 中的 Timsort 是一种非原地排序算法,因此这个函数的空间复杂度为 $O(n)$。
```python
"""
Definition of Interval:
class Interval(object):
def __init__(self, start, end):
self.start = start
self.end = end
"""
class Solution:
"""
@param intervals: an array of meeting time intervals
@return: if a person could attend all meetings
"""
def can_attend_meetings(self, intervals: List[Interval]) -> bool:
intervals.sort(key=lambda x: x.start)
for i in range(len(intervals) - 1):
if intervals[i].end > intervals[i + 1].start:
return False
return True
```
---
**:warning: 錯誤語法**
:::warning
:::
**:thumbsup:學習**
:::success
使用 lambda 关键字可以创建一个匿名函数,该函数可以接收任意数量的参数,并返回一个表达式的结果
```python
lambda arguments: expression
```
其中,arguments 是一个或多个参数名,用逗号分隔;expression 是一个表达式,用于计算并返回函数的结果。
```python
lambda x: x.start
```
来定义一个匿名函数,该函数接收一个参数 x,并返回 x.start
```python
intervals.sort(key=lambda x: x.start)
```
key 参数指定了用于排序的键,即按照每个区间的开始时间进行排序,从而得到一个按照开始时间升序排列的区间列表。
:::
**思路**
**講解連結**
sort文檔
https://docs.python.org/zh-tw/3/howto/sorting.html
###### tags: `interval` `easy` `leetcode`