Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
coolalex776
Fucking Algorithm
提交
3bdb8966
F
Fucking Algorithm
项目概览
coolalex776
/
Fucking Algorithm
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Fucking Algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
未验证
提交
3bdb8966
编写于
3月 09, 2021
作者:
B
BruceCat
提交者:
GitHub
3月 09, 2021
浏览文件
操作
浏览文件
下载
差异文件
【435. 无重叠区间】【Python3】
【435. 无重叠区间】【Python3】
上级
0e5034e4
acdf5a9c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
23 addition
and
22 deletion
+23
-22
动态规划系列/贪心算法之区间调度问题.md
动态规划系列/贪心算法之区间调度问题.md
+23
-22
未找到文件。
动态规划系列/贪心算法之区间调度问题.md
浏览文件 @
3bdb8966
...
@@ -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, point
s: List[List[int]]) -> int:
def
eraseOverlapIntervals
(
self
,
interval
s
:
List
[
List
[
int
]])
->
int
:
### 思路是
把气球的左右坐标看成是区间
### 思路是
首先找到不重叠的区间的个数
###
用最少数量的箭 相当于 找不重叠区间的个数
###
然后再用总个数减去不重叠个数
###
因为重叠的区间 用一支箭就可以全部引爆气球
###
获得的就是 需要移除的个数
# 首先获得区间的个数 为0的话就不用移除
# 首先获得区间的个数 为0的话就不用移除
n = len(
point
s)
n
=
len
(
interval
s
)
if
n
==
0
:
if
n
==
0
:
return
0
return
0
# 按照每个区间的右端点值进行排序
# 按照每个区间的右端点值进行排序
sorted_
point = sorted( point
s , key=lambda x: x[1] )
sorted_
list
=
sorted
(
interval
s
,
key
=
lambda
x
:
x
[
1
]
)
# 不重叠区间个数至少是1
# 不重叠区间个数至少是1
res
= 1
count
=
1
# end是所有不重叠的区间中 最大的右端点
# end是所有不重叠的区间中 最大的右端点
# end的初始值即是sorted_list[0]的右端点
# end的初始值即是sorted_list[0]的右端点
end = sorted_
poin
t[0][1]
end
=
sorted_
lis
t
[
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_
poin
t[i][1]
end
=
sorted_
lis
t
[
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录