[排序] 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; } };

浙公网安备 33010602011771号