1094. 拼车
假设你是一位顺风车司机,车上最初有 capacity 个空座位可以用来载客。由于道路的限制,车 只能 向一个方向行驶(也就是说,不允许掉头或改变方向,你可以将其想象为一个向量)。
这儿有一份乘客行程计划表 trips[][],其中 trips[i] = [num_passengers, start_location, end_location] 包含了第 i 组乘客的行程信息:
必须接送的乘客数量;
乘客的上车地点;
以及乘客的下车地点。
这些给出的地点位置是从你的 初始 出发位置向前行驶到这些地点所需的距离(它们一定在你的行驶方向上)。
请你根据给出的行程计划表和车子的座位数,来判断你的车是否可以顺利完成接送所有乘客的任务(当且仅当你可以在所有给定的行程中接送所有乘客时,返回 true,否则请返回 false)。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/car-pooling
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
查分法
import java.util.Arrays;
import java.util.Comparator;
class Solution {
public boolean carPooling(int[][] trips, int capacity) {
int[] cnt = new int[1001];
Arrays.sort(trips, new Comparator<int[]>() {
@Override
public int compare(int[] o1, int[] o2) {
return Integer.compare(o1[1], o2[1]);
}
});
for (int[] trip : trips) {
cnt[trip[2]] -= trip[0];
cnt[trip[1]] += trip[0];
}
int sum = 0;
for (int i = 0; i <= 1000; ++i) {
sum += cnt[i];
if (sum > capacity) {
return false;
}
}
return true;
}
}
优先队列
import java.util.Arrays;
import java.util.Comparator;
import java.util.PriorityQueue;
class Solution {
public boolean carPooling(int[][] trips, int capacity) {
PriorityQueue<int[]> heap = new PriorityQueue<>(Comparator.comparingInt(o -> o[2]));
Arrays.sort(trips, Comparator.comparingInt(o -> o[1]));
int sum = 0;
for (int[] trip : trips) {
sum += trip[0];
while (!heap.isEmpty() && heap.peek()[2] <= trip[1]) {
sum -= heap.poll()[0];
}
if (sum > capacity) {
return false;
}
heap.offer(trip);
}
return true;
}
}
心之所向,素履以往 生如逆旅,一苇以航
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】