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

题目内容

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

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

请你返回一个长度为 n 的数组 answer,里面的元素是每个航班预定的座位总数。

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

果果念

好像是第一次接触差分的思想,感觉很巧妙,算法也很巧妙。我接触这道题目时,暴力求解即O(N*N)肯定会超时的。算法的优化在于不需要重复累加每个元素,只需要过一遍就可以。

差分:后面的数减去前面的数即为差分,利用这条性质巧妙地记录了区间的范围。对于本题,需要注意的是,开始的航班号应该增,结束的航班号+1应该是减去这个区间对应的值。最后,标记好所有的区间之后,一边便利所有的标记数组即可。sumSeat[i]=sumSeat[i-1]+book[i]

进一步专业解释:

差分数组对应的概念是前缀和数组,对于数组 [1,2,2,4][1,2,2,4],其差分数组为 [1,1,0,2][1,1,0,2],差分数组的第 i个数即为原数组的第 i−1 个元素和第 i 个元素的差值,也就是说我们对差分数组求前缀和即可得到原数组。

差分数组的性质是,当我们希望对原数组的某一个区间 [l,r]施加一个增量inc 时,差分数组 d 对应的改变是:d[l]增加 inc,d[r+1] 减少inc。这样对于区间的修改就变为了对于两个位置的修改。并且这种修改是可以叠加的,即当我们多次对原数组的不同区间施加不同的增量,我们只要按规则修改差分数组即可。

链接:https://leetcode-cn.com/problems/corporate-flight-bookings/solution/hang-ban-yu-ding-tong-ji-by-leetcode-sol-5pv8/

ps:vector可以利用函数pop_back()移除末尾元素,当时没有想出来~

代码

class Solution {
public:vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {vector<int> bookSeats(n+1,0);//差分,将双重循环优化到一重,时间复杂度降为O(N);for(int i=0;i<bookings.size();i++){bookSeats[bookings[i][0]-1]+=bookings[i][2];//开始索引bookSeats[bookings[i][1]]-=bookings[i][2];//结束索引}bookSeats.pop_back();for(int i=1;i<n;i++){bookSeats[i]=bookSeats[i-1]+bookSeats[i];}return bookSeats;}
};

leetcode-1109. 航班预订统计(C++|差分)相关推荐

  1. LeetCode 1109. 航班预订统计(差分思想)

    1. 题目 这里有 n 个航班,它们分别从 1 到 n 进行编号. 我们这儿有一份航班预订表,表中第 i 条预订记录 bookings[i] = [i, j, k] 意味着我们在从 i 到 j 的每个 ...

  2. LeetCode.1109. 航班预订统计

    LeetCode.1109. 航班预订统计 难度:medium  思路: 差分数组,注意细节 diff[0] = nums[0]; 代码: class Solution {public int[] c ...

  3. C++Python描述 LeetCode 1109. 航班预订统计

    C++&Python描述 LeetCode 1109. 航班预订统计   大家好,我是亓官劼(qí guān jié ),在公众号.CSDN.GitHub.B站.华为开发者论坛等平台分享一些技 ...

  4. LeetCode 1109. 航班预订统计

    1109. 航班预订统计 [差分+前缀和] class Solution {// 差分+前缀和 3:47. 4public int[] corpFlightBookings(int[][] booki ...

  5. leetcode 1109. 航班预订统计(C++、python)

    这里有 n 个航班,它们分别从 1 到 n 进行编号. 我们这儿有一份航班预订表,表中第 i 条预订记录 bookings[i] = [i, j, k] 意味着我们在从 i 到 j 的每个航班上预订了 ...

  6. 模拟卷Leetcode【普通】1109. 航班预订统计

    1109. 航班预订统计 这里有 n 个航班,它们分别从 1 到 n 进行编号. 有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti ...

  7. 【1109. 航班预订统计】

    leetcode力扣刷题打卡 题目:1109. 航班预订统计 描述:这里有 n 个航班,它们分别从 1 到 n 进行编号. 有一份航班预订表 bookings ,表中第 i 条预订记录 booking ...

  8. LeetCode - 1109 - 航班预定统计

    目录 题目来源 题目描述 示例 提示 题目解析 算法源码 题目来源 1109. 航班预订统计 - 力扣(LeetCode) 题目描述 这里有 n 个航班,它们分别从 1 到 n 进行编号. 有一份航班 ...

  9. 1109. 航班预订统计

    1109. 航班预订统计 这里有 n 个航班,它们分别从 1 到 n 进行编号. 有一份航班预订表 bookings ,表中第 i 条预订记录 bookings[i] = [firsti, lasti ...

  10. LeetCode 力扣 算法题解 1109. 航班预订统计(Corporate Flight Bookings) n 个航班,它们分别从 1 到 n 进行编号,请返回每个航班预定的座位总数。

    文章目录 一.题目描述 示例 1: 示例 2: 提示: 二.Python解题 1.Python代码展示 2.程序逻辑解释 3.复杂度分析 官方解释 三.测试反思 1.历史提交记录 2.提交失败记录 3 ...

最新文章

  1. PCIE4.0 简单介绍
  2. 2D图片3秒变立体,变换视角流畅自然:Adobe实习生的智能景深算法,登上顶级期刊...
  3. 转载--web前端工程化
  4. Python基础:02数字
  5. Eclipse如何提高开发效率
  6. Vue项目构建后通过Nginx/SpringBoot/Express/Egg发布
  7. mysql 主键互换_MySQL-什么方法可以快速的交换两条记录的ID?
  8. 单链表的基础操作练习
  9. [傅里叶变换及其应用学习笔记] 十. 卷积与中心极限定理
  10. Linux 各种压缩类型文件 解压命令 整理 tar.bz2 tar.gz tgz等等
  11. 时间操作(Java版)—获取给定时间与当前系统时间的差值(以毫秒为单位)
  12. delphi 多个线程 多个进度条_Python 进阶知识全篇-多线程
  13. VC++进行ActiveX控件的开发
  14. 花3150本钱拉一车菠萝,在马路边摆摊卖水果,卖7天收入4170
  15. Java学习笔记:IDEA快捷方式的图标问题
  16. SpringBoot实现QQ邮箱注册和登录
  17. 87: 企业监控系统部署 、 搭建Harbor私有仓库 、 总结和答疑
  18. 利用Amazon Lambda实现Amazon IoT设备证书的即时注册
  19. 编写强力黑白棋的历程
  20. python 用爬虫写网页测试

热门文章

  1. 要想成为一名真正的程序员,有哪些要求呢
  2. STM32超低功耗进阶之RTC
  3. Matlab工具箱之-------LMI系统工具箱
  4. 百度地图开发(二)——开发前的准备(密钥的申请)
  5. linux下怎么监控网络 io swap,监控io性能,free命令,ps命令,查看网络状态,linux下抓包(示例代码)...
  6. summer 2014 校队训练 嗷嗷待补之题
  7. 那些优秀的程序员都在看哪些书?
  8. openpyxl对execl文件中图片编辑
  9. AI模型各种存储格式文件介绍(pb, onnx, ckpt, tflite, h5)
  10. 怎么对document.write写出来的内容调整对齐方式_干不过写PPT的?麦肯锡老阿姨教你4招...