1. 程式人生 > 其它 >航班預訂統計 -- LeetCode -- 8.30

航班預訂統計 -- LeetCode -- 8.30

航班預計統計

蕪湖起飛 ! 差分陣列算是我給整明白了。。。。

這個題等我學完線段樹,再重新回來看;

這裡有n個航班,它們分別從1n進行編號。

有一份航班預訂表bookings,表中第i條預訂記錄bookings[i] = [firsti, lasti, seatsi]意味著在從firstilasti(包含firstilasti)的每個航班上預訂了seatsi個座位。

請你返回一個長度為n的陣列answer,其中answer[i]是航班i上預訂的座位總數。

示例 1:

輸入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5
輸出:[10,55,45,25,25]
解釋:
航班編號        1   2   3   4   5
預訂記錄 1 :   10  10
預訂記錄 2 :       20  20
預訂記錄 3 :       25  25  25  25
總座位數:      10  55  45  25  25
因此,answer = [10,55,45,25,25]

示例 2:

輸入:bookings = [[1,2,10],[2,2,15]], n = 2
輸出:[10,25]
解釋:
航班編號        1   2
預訂記錄 1 :   10  10
預訂記錄 2 :       15
總座位數:      10  25
因此,answer = [10,25]

直接貼程式碼了:

class Solution {
public:
    vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
        vector<int> a;
        for(int i = 0; i <= n + 1; i++){
            a.push_back(0);
        }
        for(int i = 0; i < bookings.size(); i++){
            int x = bookings[i][0];
            int y = bookings[i][1];
            a[x] += bookings[i][2];
            a[y + 1] -= bookings[i][2];

        }
        for(int i = 1; i <= n + 1; i++){
            a[i] += a[i - 1];
        }
        a.erase(a.begin());
        a.pop_back();
        return a;
    }
};