欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode(853 车队)

程序员文章站 2022-04-25 21:50:47
...

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

基本就是依次两个比较即可
LeetCode(853 车队)

相关标签: leetcode刷题java