leetcode 1184. 公交站间的距离

  • 题目描述
  • 解题思路
  • 执行结果
leetcode 1184. 公交站间的距离.


题目描述

  1. 公交站间的距离

环形公交路线上有 n 个站,按次序从 0 到 n - 1 进行编号。我们已知每一对相邻公交站之间的距离,distance[i] 表示编号为 i 的车站和编号为 (i + 1) % n 的车站之间的距离。

环线上的公交车都可以按顺时针和逆时针的方向行驶。

返回乘客从出发点 start 到目的地 destination 之间的最短距离。

示例 1:

输入:distance = [1,2,3,4], start = 0, destination = 1 输出:1 解释:公交站 0 和 1 之间的距离是 1 或 9,最小值是 1。

示例 2:

输入:distance = [1,2,3,4], start = 0, destination = 2 输出:3 解释:公交站 0 和 2 之间的距离是 3 或 7,最小值是 3。

示例 3:

输入:distance = [1,2,3,4], start = 0, destination = 3 输出:4 解释:公交站 0 和 3 之间的距离是 6 或 4,最小值是 4。

提示:

1 <= n <= 10^4 distance.length == n 0 <= start, destination < n 0 <= distance[i] <= 10^4

解题思路

法1

模拟:

  1. 分别计算顺时针与逆时针的距离

  2. 比较距离的大小

  3. 返回距离最小的值

  • 时间复杂度(O(n))
  • 空间复杂度(O(1))

执行结果

法1

func distanceBetweenBusStops(distance []int, start int, destination int) int {
// 顺时针情况下从start到destination的距离
forward := 0
for i := start; i != destination; i = (i + 1) % len(distance) {
forward += distance[i]
}
// 逆时针情况下从start到destination的距离
backward := 0
for i := destination; i != start; i = (i + 1) % len(distance) {
backward += distance[i]
}
// 取较小值作为答案
if forward < backward {
return forward
}
return backward
}

执行结果: 通过 显示详情 查看示例代码 添加备注

执行用时: 4 ms , 在所有 Go 提交中击败了 52.00% 的用户 内存消耗: 2.6 MB , 在所有 Go 提交中击败了 80.00% 的用户 通过测试用例: 37 / 37 炫耀一下:



本文由 mdnice 多平台发布

你可能感兴趣的:(后端)