写点什么

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

  • 2022-11-15
    北京
  • 本文字数:709 字

    阅读完需:约 2 分钟

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代码

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2021-02-15 加入

还未添加个人简介

评论

发布
暂无评论
2022-11-15:这里有 n 个航班,它们分别从 1 到 n 进行编号。 有一份航班预订表 bookings , 表中第 i 条预订记录 bookings[i] = [firsti, lasti,_算法_福大大架构师每日一题_InfoQ写作社区