3540. 访问所有房屋的最短时间 🔒
题目描述
给定两个整数数组 forward
和 backward
,长度都为 n
。同时给定另一个整数数组 queries
。
有 n
个排列为环形的房屋。房屋通过道路以特殊方式相连:
- 对于所有的
0 <= i <= n - 2
,房屋i
通过一条长度为forward[i]
米的道路连接到房屋i + 1
。另外,房屋n - 1
通过一条长度为forward[n - 1]
米的道路连接回房屋 0,形成一个环。 - 对于所有的
1 <= i <= n - 1
,房屋i
通过一条长度为backward[i]
米的道路连接到房屋i - 1
。另外,房屋 0 通过一条长度为backward[n - 1]
米的道路连接回房屋n - 1
,形成一个环。
你可以以 1 米每秒的速度行走。从房屋 0 开始,找到按照 queries
指定的顺序访问每所房屋的 最小 时间。
返回访问房屋所需的 最短 总时间。
示例 1:
输入:forward = [1,4,4], backward = [4,1,2], queries = [1,2,0,2]
输出:12
解释:
路径如下:0(0) → 1(1) → 2(5) → 1(7) → 0(8) → 2(12)
。
注意:使用的 node(total time)
符号,→
表示前向道路,→
表示反向道路。
示例 2:
输入:forward = [1,1,1,1], backward = [2,2,2,2], queries = [1,2,3,0]
输出:4
解释:
经过路径是 0 → 1 → 2 → 3 → 0
。每一步都在前向方向,需要 1 秒。
提示:
2 <= n <= 105
n == forward.length == backward.length
1 <= forward[i], backward[i] <= 105
1 <= queries.length <= 105
0 <= queries[i] < n
queries[i] != queries[i + 1]
queries[0]
非 0。
解法
方法一
1 |
|
1 |
|
1 |
|
1 |
|