2022-11-15:这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings , 表中第 i 条预订记录 bookings[i] = [firsti, lasti,

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-11-15:这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings , 表中第 i 条预订记录 bookings[i] = [firsti, lasti,相关的知识,希望对你有一定的参考价值。

2022-11-15:这里有 n 个航班,它们分别从 1 到 n 进行编号。
有一份航班预订表 bookings ,
表中第 i 条预订记录 bookings[i] = [firsti, lasti, seatsi]
意味着在从 firsti 到 lasti
(包含 firsti 和 lasti )的 每个航班 上预订了 seatsi 个座位。
请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。
输入:bookings = [[1,2,10],[2,3,20],[2,5,25]], n = 5。
输出:[10,55,45,25,25]。

答案2022-11-15:

力扣1109。
线段树。
差分+前缀和。

代码用rust编写。代码如下:

use std::iter::repeat;

impl Solution 
    pub fn corp_flight_bookings(bookings: Vec<Vec<i32>>, n: i32) -> Vec<i32> 
        // 1 2 3 4 n
        // 0 1 2 3 .. n n+1
        let mut cnt: Vec<i32> = repeat(0).take((n + 2) as usize).collect();
        for book in bookings.iter() 
            // start book[0]
            // end   book[1]
            // 票    book[2]
            cnt[book[0] as usize] += book[2];
            cnt[(book[1] + 1) as usize] -= book[2];
        
        for i in 1..cnt.len() 
            cnt[i] += cnt[i - 1];
        
        let mut ans: Vec<i32> = repeat(0).take(n as usize).collect();
        for i in 0..n 
            ans[i as usize] = cnt[(i + 1) as usize];
        
        return ans;
    


fn main() 
    let b = vec![vec![1, 2, 10], vec![2, 3, 20], vec![2, 5, 25]];
    let n = 5;
    let ans = Solution::corp_flight_bookings(b, n);
    println!("ans = :?", ans);


struct Solution 

执行结果如下:


左神java代码

以上是关于2022-11-15:这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings , 表中第 i 条预订记录 bookings[i] = [firsti, lasti,的主要内容,如果未能解决你的问题,请参考以下文章

1109. 航班预订统计

leetcode1109 航班预订统计

python算法 前缀和

Leetcode刷题100天—1109. 航班预订统计(数组)—day24

Leetcode刷题100天—1109. 航班预订统计(数组)—day24

LeetCode 1109. 航班预订统计(差分数组基于差分的树状数组)/ 165. 比较版本号 / 剑指 Offer 22. 链表中倒数第k个节点