N
辆车沿着一条车道驶向位于 target
英里之外的共同目的地。
每辆车 i
以恒定的速度 speed[i]
(英里/小时),从初始位置 position[i]
(英里) 沿车道驶向目的地。
一辆车永远不会超过前面的另一辆车,但它可以追上去,并与前车以相同的速度紧接着行驶。
此时,我们会忽略这两辆车之间的距离,也就是说,它们被假定处于相同的位置。
车队 是一些由行驶在相同位置、具有相同速度的车组成的非空集合。注意,一辆车也可以是一个车队。
即便一辆车在目的地才赶上了一个车队,它们仍然会被视作是同一个车队。
会有多少车队到达目的地?
示例:
输入:target = 12, position = [10,8,0,5,3], speed = [2,4,1,1,3] 输出:3 解释: 从 10 和 8 开始的车会组成一个车队,它们在 12 处相遇。 从 0 处开始的车无法追上其它车,所以它自己就是一个车队。 从 5 和 3 开始的车会组成一个车队,它们在 6 处相遇。 请注意,在到达目的地之前没有其它车会遇到这些车队,所以答案是 3。
思路:
我们将位置和速度用字典关联后,将位置降序排列。这样我们将第一辆车视为领头羊,然后看后续车辆是否能追上领头羊,能追上则并入车队,不能追上就将该车视为领头羊(因为车辆最多追上在他之前的一辆车,所以不用考虑后续车辆的问题),并将计数器+1.直到遍历完position。因为遍历中始终有一个车队未计数,所以最后结果+1.
代码:
class Solution:
def carFleet(self, target, position, speed):
"""
:type target: int
:type position: List[int]
:type speed: List[int]
:rtype: int
"""
res = 0
positions = None
if len(position) == 0:
return 0
cardict = dict(zip(position, speed))
carlist = position
carlist.sort(reverse = True)
for car in carlist:
if positions == None:
positions = car
speeds = cardict[car]
elif (target - positions) / speeds < (target - car) / cardict[car]:
positions = car
speeds = cardict[car]
res += 1
return res + 1