栈-N853-车队

2019-04-16  本文已影响0人  三次元蚂蚁

题目

思路

代码

class Solution {
    public int carFleet(int target, int[] position, int[] speed) {
        if (position.length == 0) {
            return 0;
        }
        
        Car[] cars = new Car[position.length];
        for (int i = 0; i < position.length; ++i) {
            cars[i] = new Car(position[i], speed[i]);
        }
        Arrays.sort(cars, (car1, car2) -> car1.position - car2.position);
        
        LinkedList<Car> stack = new LinkedList<>();
        stack.push(cars[0]);
        for (int i = 1; i < position.length; ++i) {
            while (true) {
                if (stack.peek().slower(cars[i], target)) {
                    stack.push(cars[i]);
                    break;
                } else {
                    stack.pop();
                    if (stack.isEmpty()) {
                        stack.push(cars[i]);
                        break;
                    }
                }
            }
        }
        
        return stack.size();
    }
    
    private class Car {
        int position;
        int speed;
        Car(int position, int speed) {
            this.position = position;
            this.speed = speed;
        }
        
        boolean slower(Car car, int target) {
            if (car.speed >= speed) {
                return true;
            } else {
                // strong rotation one, not both
                return (long)(car.position - position) * car.speed > (long)(target - car.position) * (speed - car.speed);
            }
        }
    }
}
上一篇 下一篇

猜你喜欢

热点阅读