当前位置: 首页 > 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 逻辑回归参数详解
  • 人民日报和音:书写周边命运共同体建设新篇章
  • 儿童阅读空间、残疾人友好书店……上海黄浦如何打造城市书房
  • 海外考古大家访谈|马克·波拉德:以考古意识为本位的科技考古学家
  • 日本长野一夜连震47次,当局呼吁警惕更大地震
  • 考艾的森林与雾气中,艺术在生长
  • 上海一季度人民币贷款增4151亿,住户存款增3134亿