Car Pooling

medium intervals line sweep

Problem

trips[i] = [numPassengers, from, to]. Given a car capacity, determine whether all trips can be accommodated without ever exceeding capacity. (Drop-off happens at 'to' — that location frees seats.)

Inputtrips = [[2,1,5],[3,3,7]], capacity = 4
Outputfalse
At location 3 → 5, the car carries 2 + 3 = 5 passengers; over capacity.

def car_pooling(trips, capacity):
    diff = [0] * 1001
    for n, a, b in trips:
        diff[a] += n
        diff[b] -= n
    cur = 0
    for v in diff:
        cur += v
        if cur > capacity:
            return False
    return True
function carPooling(trips, capacity) {
  const diff = new Array(1001).fill(0);
  for (const [n, a, b] of trips) {
    diff[a] += n;
    diff[b] -= n;
  }
  let cur = 0;
  for (const v of diff) {
    cur += v;
    if (cur > capacity) return false;
  }
  return true;
}
class Solution {
    public boolean carPooling(int[][] trips, int capacity) {
        int[] diff = new int[1001];
        for (int[] t : trips) {
            diff[t[1]] += t[0];
            diff[t[2]] -= t[0];
        }
        int cur = 0;
        for (int v : diff) {
            cur += v;
            if (cur > capacity) return false;
        }
        return true;
    }
}
bool carPooling(vector<vector<int>>& trips, int capacity) {
    vector<int> diff(1001, 0);
    for (auto& t : trips) {
        diff[t[1]] += t[0];
        diff[t[2]] -= t[0];
    }
    int cur = 0;
    for (int v : diff) {
        cur += v;
        if (cur > capacity) return false;
    }
    return true;
}
Time: O(n + R) Space: O(R)