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

2022-11-15 22:18:25 浏览数 (1)

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

有一份航班预订表 bookings ,

表中第 i 条预订记录 bookingsi = 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编写。代码如下:

代码语言: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代码

0 人点赞