当前位置: 首页 > news >正文

LeetCode - 1109 - 航班预定统计

目录

题目来源

题目描述

示例

提示

题目解析

算法源码


题目来源

1109. 航班预订统计 - 力扣(LeetCode)

题目描述

这里有 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]
说明航班编号        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]
输入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

题目解析

本题如果用暴力求解的话,即双重for,外层遍历bookings,内层遍历bookings[i],

bookings[i][0]代表一个起始航班,bookings[i][1]代表一个终点航班,bookings[i][2]代表一个航班预定座位数

预先定义一个航班座位数组arr,arr[k]表示k航班预定的座位数。

在内层遍历中,再定义一个for循环,遍历bookings[i][0]~bookings[i][1]的每一个航班k,给对应的arr[k] += bookings[i][2]即可。

这个算法时间复杂度是 O(n^3),在本题数量级来看是超时的。

而本题其实是典型的为给定区间所有元素加上一个增量,可以利用差分数列求解。关于差分数列,请看:

算法设计 - 前缀和 & 差分数列_伏城之外的博客-CSDN博客

Java算法源码

class Solution {
    public int[] corpFlightBookings(int[][] bookings, int n) {
        int[] diff = new int[n];

        for(int i=0; i<bookings.length; i++) {
            int start = bookings[i][0];
            int end = bookings[i][1];
            int add = bookings[i][2];

            diff[start - 1] += add;
            if(end < n) diff[end] -= add;
        }

        int[] ans = new int[n];
        ans[0] = diff[0];

        for(int i=1; i<n; i++) {
            ans[i] = ans[i-1] + diff[i];
        }

        return ans;
    }
}

相关文章:

  • Rust编码的信息窃取恶意软件源代码公布,专家警告已被利用
  • typora每次复制文档都要附带图片文件夹?学会配置gitee图床
  • 离散数学 课时一 命题逻辑的基本概念
  • Typescript - 类型守卫(typeof / in / instanceof / 自定义类型保护的类型谓词)通俗易懂详细教程
  • 【Android -- 每日一问】现在 Android 怎么学?学什么?
  • 蔚来日常实习收获
  • 【C++入门】命名空间,输出输入,缺省参数,函数重载
  • [oeasy]python0078_设置索引颜色_index_color_ansi_控制终端颜色
  • day3——有关java运算符的笔记
  • 二、Linux文件 - Open函数讲解实战
  • Matlab 点云迭代加权最小二乘法拟合平面(抑制噪声)
  • XCP实战系列介绍08-基于Vehicle Spy进行XCP测量的工程配置详解
  • 某程序员去华为面试,因为错了一道题而被淘汰
  • Mysql 数据类型
  • 尚医通(八) Nginx
  • npoi word 里面厂家操作
  • 若依框架---分页功能
  • ESP8266 + STC15基于AT指令通过TCP通讯协议控制IO状态
  • 【H5】html实现微信授权登陆
  • Lesson 6.3 正则化与 sklearn 逻辑回归参数详解
  • 自我田野|从城市搬到农村生活,我找回了真实和附近
  • 体坛联播|拜仁遭绝平未能提前夺冠,刘翔钻石联赛纪录作古
  • 谢震业领衔挑战世界顶尖高手,这场长三角田径钻石赛值得期待
  • 停电催生商机,中国品牌 “照亮” 西班牙
  • 解放日报社论:只争朝夕、不负重托,加快建成具有全球影响力的科技创新高地
  • 美财长称关税战升级的责任在中方,外交部:关税战、贸易战没有赢家