LeetCode(853 车队)

如题在这里插入图片描述
很显然直接按照规则去检索会非常麻烦。想办法取巧实现,对于组成车队的情况,实际上就是后面的速度快赶上前面,并且赶上前面之后就可视为前面的了,那么很显然每辆车都只用与它位置上的前一位相比较,比较的基准是什么呢,可以选取到达时间,落后的到达时间更短很显然必然能汇合

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;
    }

基本就是依次两个比较即可
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值