[排序] leetcode 853 Car Fleet

problem:https://leetcode.com/problems/car-fleet/ 

        按位置对车进行排序,然后从后往前扫描,判断当前车能否被后面一辆车超越(比较后面的车达到终点用的时间是否更短),如果能,以当前这辆车为基础,再判断下一辆后面的车能否超越它;否则以后面一辆车作为新的比较标准。

        因为队首的车是跑的最慢的,所以只要能够超过它,就一定能组成车队,而非队首的车一开始速度快,之后速度变慢,计算复杂,不适合作为比较对象。

bool cmp(const vector<int>& v1, const vector<int>& v2)
{
    return v1[0] == v2[0] ? v1[1] < v2[1] : v1[0] < v2[0];
}
class Solution {
public:
    int carFleet(int target, vector<int>& position, vector<int>& speed) {
        if(position.size() == 0) return 0;
        vector<vector<int>> car;
        for(int i = 0;i < position.size();i++)
        {
            car.push_back({position[i],speed[i]});
        }
        sort(car.begin(),car.end(),cmp);
        int res = car.size();
        float last = float(target - car.back()[0]) / car.back()[1];
        for(int i = car.size() - 1;i > 0;i--)
        {
            float cur = float(target - car[i - 1][0]) / car[i - 1][1];
            if(cur <= last)
            {
                res--;
            }
            else
            {
                last = cur;
            }
        }
        return res;
    }
};

 

posted @ 2019-08-03 10:55  fish1996  阅读(168)  评论(0)    收藏  举报