未验证 提交 3bdb8966 编写于 作者: B BruceCat 提交者: GitHub

【435. 无重叠区间】【Python3】

【435. 无重叠区间】【Python3】
...@@ -160,41 +160,41 @@ int findMinArrowShots(int[][] intvs) { ...@@ -160,41 +160,41 @@ int findMinArrowShots(int[][] intvs) {
======其他语言代码====== ======其他语言代码======
[Edwenc](https://github.com/Edwenc) 提供 第452题的python3 代码: ### python
Edwenc 提供 第435题的python3 代码:
```python3
```python
class Solution: class Solution:
def findMinArrowShots(self, points: List[List[int]]) -> int: def eraseOverlapIntervals(self, intervals: List[List[int]]) -> int:
### 思路是把气球的左右坐标看成是区间 ### 思路是首先找到不重叠的区间的个数
### 用最少数量的箭 相当于 找不重叠区间的个数 ### 然后再用总个数减去不重叠个数
### 因为重叠的区间 用一支箭就可以全部引爆气球 ### 获得的就是 需要移除的个数
# 首先获得区间的个数 为0的话就不用移除 # 首先获得区间的个数 为0的话就不用移除
n = len(points) n = len(intervals)
if n==0: if n==0:
return 0 return 0
# 按照每个区间的右端点值进行排序 # 按照每个区间的右端点值进行排序
sorted_point = sorted( points , key=lambda x: x[1] ) sorted_list = sorted( intervals , key=lambda x: x[1] )
# 不重叠区间个数至少是1 # 不重叠区间个数至少是1
res = 1 count = 1
# end是所有不重叠的区间中 最大的右端点 # end是所有不重叠的区间中 最大的右端点
# end的初始值即是sorted_list[0]的右端点 # end的初始值即是sorted_list[0]的右端点
end = sorted_point[0][1] end = sorted_list[0][1]
# 从序号1开始往后找 # 从1开始往后找 因为0在上面已经取过了
for i in range(1,n): for i in range(1,n):
# start是当前区间左端点值 # start是当前区间左端点值
start = sorted_point[i][0] start = sorted_list[i][0]
# 如果当前左端点比最大右端点都严格大了 # 如果当前左端点比最大右端点都大了(可能相等)
# 说明两区间严格不重叠 count+1 再更新end # 说明两区间不重叠 count+1 再更新end
if start > end: if start>=end:
res += 1 count += 1
end = sorted_point[i][1] end = sorted_list[i][1]
return res # 最后返回的是 需要移除的区间个数
return n-count
``` ```
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册