1109. Corporate Flight Bookings

1109. Corporate Flight Bookings

Description

Difficulty: Medium

Related Topics: Array, Prefix Sum

There are n flights that are labeled from 1 to n.

You are given an array of flight bookings bookings, where bookings[i] = [firsti, lasti, seatsi] represents a booking for flights firsti through lasti (inclusive) with seatsi seats reserved for each flight in the range.

Return an array answer of length n, where answer[i] is the total number of seats reserved for flight i.

Example 1:

1
2
3
4
5
6
7
8
9
Input: bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
Output: [10,55,45,25,25]
Explanation:
Flight labels: 1 2 3 4 5
Booking 1 reserved: 10 10
Booking 2 reserved: 20 20
Booking 3 reserved: 25 25 25 25
Total seats: 10 55 45 25 25
Hence, answer = [10,55,45,25,25]

Example 2:

1
2
3
4
5
6
7
8
9
Input: bookings = [[1,2,10],[2,2,15]], n = 2
Output: [10,25]
Explanation:
Flight labels: 1 2
Booking 1 reserved: 10 10
Booking 2 reserved: 15
Total seats: 10 25
Hence, answer = [10,25]

Constraints:

  • 1 <= n <= 2 * 104
  • 1 <= bookings.length <= 2 * 104
  • bookings[i].length == 3
  • 1 <= firsti <= lasti <= n
  • 1 <= seatsi <= 104

Hints/Notes

  • Use the diff array

Solution

Language: C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
    vector<intcorpFlightBookings(vector<vector<int>>& bookings, int n) {
        vector<intdiffs(n, 0);
        for (vector<int> booking : bookings) {
            int start = booking[0] - 1, end = booking[1] - 1, diff = booking[2];
            diffs[start] += diff;
            if (end + 1 < n) {
                diffs[end + 1] -= diff;
            }
        }
        vector<int> res;
        res.push_back(diffs[0]);
        for (int i = 1; i < n; i++) {
            res.push_back(res[i - 1] + diffs[i]);
        }
        return res;
    }
};