leetcode1109 航班预订统计

简介: leetcode1109 航班预订统计

题目

这里有 n 个航班,它们分别从 1 到 n 进行编号。

有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi] 意味着在从 firsti 到 lasti (包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。

请你返回一个长度为 n 的数组 answer,其中 answer[i] 是航班 i 上预订的座位总数。

来源:力扣(LeetCode

链接:https://leetcode-cn.com/problems/corporate-flight-bookings

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

示例 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]

提示:

1 <= n <= 2 * 104

1 <= bookings.length <= 2 * 104

bookings[i].length == 3

1 <= firsti <= lasti <= n

1 <= seatsi <= 104

题解

1、暴力(双层循环解题)

/**
 * @param {number[][]} bookings
 * @param {number} n
 * @return {number[]}
 */
var corpFlightBookings = function(bookings, n) {
    let res = new Array(n).fill(0);
    for(let i = 0; i < bookings.length; i++){
        for(let j = bookings[i][0]; j <= bookings[i][1]; j++){
            res[j-1] += bookings[i][2];
        }
    }
    return res;
};

2、差分

将区间[l,r]整体增加一个值 val操作,我们可以对差分数组arr的影响看成两部分:

(1)区间左端点:arr[l] += val,由于差分是前缀和的逆向过程,这个操作对于将来的查询而言,带来的影响是对于所有的下标大于等于 l 的位置都增加了值 val;

(2)区间右端点:arr[r + 1] -= val,由于我们期望只对区间[l,r]产生影响,因此需要对下标大于r的位置进行减值操作,右端的值就不会受到前面操作的影响。

具体代码如下

/**
 * @param {number[][]} bookings
 * @param {number} n
 * @return {number[]}
 */
var corpFlightBookings = function(bookings, n) {
    let res = new Array(n).fill(0);
    for(let i = 0; i < bookings.length; i++){
    //区间左端点
        res[bookings[i][0] - 1] += bookings[i][2];
    //区间右端点+1
        if(bookings[i][1] < n){
            res[bookings[i][1]] -= bookings[i][2];
        }
    }
    for(let i = 1; i < n; i++){
        res[i] += res[i - 1];
    }
    return res;
};
目录
相关文章
|
3月前
|
算法 测试技术 C#
区间合并|LeetCode2963:统计好分割方案的数目
区间合并|LeetCode2963:统计好分割方案的数目
|
3月前
|
算法 安全 测试技术
[组合数学]LeetCode:2954:统计感冒序列的数目
[组合数学]LeetCode:2954:统计感冒序列的数目
|
3月前
|
算法 测试技术 C#
【离散差分】LeetCode2953:统计完全子字符串
【离散差分】LeetCode2953:统计完全子字符串
|
3月前
leetcode-1220:统计元音字母序列的数目
leetcode-1220:统计元音字母序列的数目
30 0
|
3月前
leetcode-1995. 统计特殊四元组
leetcode-1995. 统计特殊四元组
24 0
|
6天前
[leetcode~数位动态规划] 2719. 统计整数数目 hard
[leetcode~数位动态规划] 2719. 统计整数数目 hard
|
1月前
leetcode2376. 统计特殊整数
leetcode2376. 统计特殊整数
15 1
|
1月前
|
Serverless
leetcode2719. 统计整数数目
leetcode2719. 统计整数数目
14 0
|
3月前
|
算法 测试技术 C#
LeetCode2444: 统计定界子数组的数目
LeetCode2444: 统计定界子数组的数目
|
3月前
|
算法 测试技术 C#
【滑动窗口】LeetCode2953:统计完全子字符串
【滑动窗口】LeetCode2953:统计完全子字符串

热门文章

最新文章