Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Kwan的解忧杂货铺@新空间代码工作室
python-algorithm
提交
1396d0c9
P
python-algorithm
项目概览
Kwan的解忧杂货铺@新空间代码工作室
/
python-algorithm
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
python-algorithm
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
1396d0c9
编写于
7月 07, 2023
作者:
Kwan的解忧杂货铺@新空间代码工作室
🐭
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix:待处理
上级
0cddc19b
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
50 addition
and
0 deletion
+50
-0
01-数组/day04/problem_solving_05.py
01-数组/day04/problem_solving_05.py
+50
-0
未找到文件。
01-数组/day04/problem_solving_05.py
0 → 100644
浏览文件 @
1396d0c9
"""
过桥的时间
"""
import
heapq
from
typing
import
List
class
Solution
:
def
findCrossingTime
(
self
,
n
:
int
,
k
:
int
,
time
:
List
[
List
[
int
]])
->
int
:
time
.
sort
(
key
=
lambda
t
:
t
[
0
]
+
t
[
2
])
# 稳定排序
cur
=
0
workL
,
waitL
,
waitR
,
workR
=
[],
[[
-
i
,
0
]
for
i
in
range
(
k
-
1
,
-
1
,
-
1
)],
[],
[]
# 下标越大效率越低
while
n
:
while
workL
and
workL
[
0
][
0
]
<=
cur
:
p
=
heapq
.
heappop
(
workL
)
p
[
0
],
p
[
1
]
=
p
[
1
],
p
[
0
]
heapq
.
heappush
(
waitL
,
p
)
# 左边完成放箱
while
workR
and
workR
[
0
][
0
]
<=
cur
:
p
=
heapq
.
heappop
(
workR
)
p
[
0
],
p
[
1
]
=
p
[
1
],
p
[
0
]
heapq
.
heappush
(
waitR
,
p
)
# 右边完成搬箱
if
waitR
:
# 右边过桥,注意加到 waitR 中的都是 <= cur 的(下同)
p
=
heapq
.
heappop
(
waitR
)
cur
+=
time
[
-
p
[
0
]][
2
]
p
[
1
]
=
p
[
0
]
p
[
0
]
=
cur
+
time
[
-
p
[
0
]][
3
]
heapq
.
heappush
(
workL
,
p
)
# 放箱
elif
waitL
:
# 左边过桥
p
=
heapq
.
heappop
(
waitL
)
cur
+=
time
[
-
p
[
0
]][
0
]
p
[
1
]
=
p
[
0
]
p
[
0
]
=
cur
+
time
[
-
p
[
0
]][
1
]
heapq
.
heappush
(
workR
,
p
)
# 搬箱
n
-=
1
elif
len
(
workL
)
==
0
:
cur
=
workR
[
0
][
0
]
# cur 过小,找个最小的放箱/搬箱完成时间来更新 cur
elif
len
(
workR
)
==
0
:
cur
=
workL
[
0
][
0
]
else
:
cur
=
min
(
workL
[
0
][
0
],
workR
[
0
][
0
])
while
workR
:
t
,
i
=
heapq
.
heappop
(
workR
)
# 右边完成搬箱
# 如果没有排队,直接过桥;否则由于无论谁先过桥,最终完成时间都一样,所以也可以直接计算
cur
=
max
(
t
,
cur
)
+
time
[
-
i
][
2
]
return
cur
# 最后一个过桥的时间
if
__name__
==
'__main__'
:
result
=
Solution
().
findCrossingTime
(
1
,
3
,
[[
1
,
1
,
2
,
1
],
[
1
,
1
,
3
,
1
],
[
1
,
1
,
4
,
1
]])
print
(
result
)
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录