车队到达问题

N  辆车沿着一条车道驶向位于 target 英里之外的共同目的地。

每辆车 i 以恒定的速度 speed[i] (英里/小时),从初始位置 position[i] (英里) 沿车道驶向目的地。

一辆车永远不会超过前面的另一辆车,但它可以追上去,并与前车以相同的速度紧接着行驶。

此时,我们会忽略这两辆车之间的距离,也就是说,它们被假定处于相同的位置。

车队 是一些由行驶在相同位置、具有相同速度的车组成的非空集合。注意,一辆车也可以是一个车队。

即便一辆车在目的地才赶上了一个车队,它们仍然会被视作是同一个车队。

链接:https://leetcode-cn.com/problems/car-fleet

主要解题思路:
二维数组 [存放初始位置][存放离终点的位置,存放时间]

	重写排序:[x][ , ] 排序标准:以初始位置的大小进行排序:
			大的在前,小的在后,所以在后面遍历时:

			先遍历离终点最近的,再遍历离终点最远的
			离终点:远的时间 < 近的时间  不做处理 (能赶上)
					远的时间 > 近的时间  res++(车队+1)
					更新:存储farsitetime为closesitetime

class Solution {
public int carFleet(int target, int[] position, int[] speed) {
float[][] map = new float[position.length][2];//以位置进行分组
for (int i = 0; i < position.length; i++) {
map[i][0] = position[i];//0存放初始位置
map[i][1] = (float)(target-position[i])/speed[i]; //存放时间
}
//对map排序,以位置的远近排序 由近到远排序
Arrays.sort(map, new Comparator<float[]>() {
@Override
public int compare(float[] o1, float[] o2) {
return (int)(o2[0]-o1[0]);//因为存放的是浮点,需要一个类型转换
}
});
int res = 0;//计算车队数
float closesitetime = 0;//存储近的时间
for (int i = 0 ; i < position.length; i++) {
//由近到远开始计算 远的时间<近的时间 不做处理
// 远的时间>近的时间 存储shorttime为当下的时间(远的时间)
// res++(车队+1)
//每次更新当下车队的时间
float farsitetime = map[i][1];//存储远的时间
if (farsitetime > closesitetime){
res++;//车队+1
closesitetime = farsitetime;
//更新近的时间

        }
    }
    return res;
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值