LeetCode(853 车队)
程序员文章站
2022-04-25 21:50:47
...
如题
很显然直接按照规则去检索会非常麻烦。想办法取巧实现,对于组成车队的情况,实际上就是后面的速度快赶上前面,并且赶上前面之后就可视为前面的了,那么很显然每辆车都只用与它位置上的前一位相比较,比较的基准是什么呢,可以选取到达时间,落后的到达时间更短很显然必然能汇合
public static int carFleet(int target, int[] position, int[] speed) {
if(position==null||position.length==0){
return 0;
}//缓存直接到达所需时间
Map<Integer,Double> times = new HashMap<Integer, Double>(position.length);
for(int i=0;i<position.length;i++) {
double time = (double)(target-position[i])/speed[i];//到达所需时间
times.put(position[i], time);
}
Arrays.sort(position);//排序
int count = 1;
double time = times.get(position[position.length-1]);//初始为最近的车
for(int i=position.length-2;i>=0;i--) {
if(times.get(position[i])<=time) {//到达所需时间更长则为新车,注意必须大于等于时
continue;//对应目标出汇合,本题情况下已经说明,等同一个车队
}else {
count++;
time = times.get(position[i]);
}
}
return count;
}
基本就是依次两个比较即可