leetcode2211_go_统计道路上的碰撞次数

leetcode2211_go_统计道路上的碰撞次数

首页休闲益智公路碰撞更新时间:2024-04-29
题目

在一条无限长的公路上有 n 辆汽车正在行驶。汽车按从左到右的顺序按从 0 到 n - 1 编号,每辆车都在一个 独特的 位置。

给你一个下标从 0 开始的字符串 directions ,长度为 n 。

directions[i] 可以是 'L'、'R' 或 'S' 分别表示第 i 辆车是向 左 、向 右 或者 停留 在当前位置。每辆车移动时 速度相同 。

碰撞次数可以按下述方式计算:

当两辆移动方向 相反 的车相撞时,碰撞次数加 2 。

当一辆移动的车和一辆静止的车相撞时,碰撞次数加 1 。

碰撞发生后,涉及的车辆将无法继续移动并停留在碰撞位置。除此之外,汽车不能改变它们的状态或移动方向。

返回在这条道路上发生的 碰撞总次数 。

示例 1:输入:directions = "RLRSLL" 输出:5

解释:将会在道路上发生的碰撞列出如下:

- 车 0 和车 1 会互相碰撞。由于它们按相反方向移动,碰撞数量变为 0 2 = 2 。

- 车 2 和车 3 会互相碰撞。由于 3 是静止的,碰撞数量变为 2 1 = 3 。

- 车 3 和车 4 会互相碰撞。由于 3 是静止的,碰撞数量变为 3 1 = 4 。

- 车 4 和车 5 会互相碰撞。在车 4 和车 3 碰撞之后,车 4 会待在碰撞位置,接着和车 5 碰撞。碰撞数量变为 4 1 = 5 。

因此,将会在道路上发生的碰撞总次数是 5 。

示例 2:输入:directions = "LLRR" 输出:0

解释:不存在会发生碰撞的车辆。因此,将会在道路上发生的碰撞总次数是 0 。

提示:1 <= directions.length <= 105

directions[i] 的值为 'L'、'R' 或 'S'

解题思路分析

1、内置函数;时间复杂度O(n),空间复杂度O(n)

func countCollisions(directions string) int { s := strings.TrimLeft(directions, "L") // 左边向左不会发生碰撞 s = strings.TrimRight(s, "R") // 右边向右不会发生碰撞 return len(s) - strings.Count(s, "S") // 剩下的车都会发生碰撞 }

2、遍历;时间复杂度O(n),空间复杂度O(1)

func countCollisions(directions string) int { n := len(directions) i, j := 0, n-1 for i < n && directions[i] == 'L' { i } for j >= 0 && directions[j] == 'R' { j-- } count := 0 for k := i; k <= j; k { if directions[k] == 'S' { count } } return j - i 1 - count }总结

Medium题目,想清楚思路就行

,
大家还看了
也许喜欢
更多游戏

Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved