class Solution {
public double[] getCollisionTimes(int[][] cars) {
int n=cars.length;
double[] rets=new double[n];
Deque<double[]> dq=new LinkedList<double[]>();
dq.offerLast(new double[]{0,(double)cars[n-1][1]});
rets[n-1] = -1;
for(int i=n-2;i>=0;i--){
int gap = cars[i+1][0] - cars[i][0];
double vv = cars[i][1];
double total = 0;
if(vv <= dq.peekLast()[1]){
dq.clear();
dq.offerLast(new double[]{0,vv});
rets[i] = -1;
continue;
}
double t = dq.peekFirst()[0];
double v = dq.peekFirst()[1];
while(dq.size()>0){
if(total + v*(dq.peekFirst()[0] - t) + gap >= vv*dq.peekFirst()[0]){
total += v*(dq.peekFirst()[0] - t);
t = dq.peekFirst()[0];
v = dq.peekFirst()[1];
dq.pollFirst();
}else{
break;
}
}
double dt = (gap-(t*vv-total)) * 1.0 / (vv-v);
dq.offerFirst(new double[]{t+dt,v});
dq.offerFirst(new double[]{0,vv});
rets[i] = t+dt;
}
return rets;
}
}```
leetcode 1776 抄写
最新推荐文章于 2024-08-13 21:21:03 发布