Leetcode 853. Car Fleet
题目链接: Car Fleet
难度:Medium
题目大意:
知道一段路的距离,以及所有车辆的位置和速度,所有车都不能超车,如果要追上一辆车的时候和这辆车组成一个车队跟在后面行驶,求最后一共有几个车队达到终点。
思路:
将每辆车的位置以及到达终点所需的时间用二维数组存储起来,如果车A在车B后面,且车A到达终点所需的时间小于车B,则车A能和车B组成车队,否则则不能组成车队。
代码
class Solution {//参考高赞回答
public int carFleet(int target, int[] position, int[] speed) {
int N=position.length;
if(N==0){
return 0;
}
double[][] cars=new double[N][2];
for(int i=0;i<N;i++){
cars[i]=new double[]{position[i],(double)(target-position[i])/speed[i]};//存储每辆车的位置和到达终点的时间
}
Arrays.sort(cars,(a,b)->Double.compare(a[0],b[0]));
double cur=cars[N-1][1];
int ans=1;
for(int i=N-2;i>=0;i--){
if(cars[i][1]>cur){//如果追不上
ans++;
cur=cars[i][1];//后面的车无法超越这辆车
}
}
return ans;
}
}