leetcode1109. 航班预订统计(java)

news2024/11/24 13:53:37

差分数组

  • leetcode1109. 航班预订统计
    • 差分数组
    • 解题代码演示
  • 上期经典

leetcode1109. 航班预订统计

难度 - 中等
原题链接 - 1109. 航班预订统计

这里有 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 * 1e4
1 <= bookings.length <= 2 * 1e4
bookings[i].length == 3
1 <= firsti <= lasti <= n
1 <= seatsi <= 1e4
在这里插入图片描述

差分数组

,差分数组的主要适用场景是频繁对原始数组的某个区间的元素进行增减。
比如说,我给你输入一个数组 nums,然后又要求给区间 nums[2…6] 全部加 1,再给 nums[3…9] 全部减 3,再给 nums[0…4] 全部加 2,再给…

这里就需要差分数组的技巧,类似前缀和技巧构造的 preSum 数组,我们先对 nums 数组构造一个 diff 差分数组,diff[i] 就是 nums[i] 和 nums[i-1] 之差:

int[] diff = new int[nums.length];
// 构造差分数组
diff[0] = nums[0];
for (int i = 1; i < nums.length; i++) {
    diff[i] = nums[i] - nums[i - 1];
}

在这里插入图片描述通过这个 diff 差分数组是可以反推出原始数组 nums 的,代码逻辑如下:

int[] res = new int[diff.length];
// 根据差分数组构造结果数组
res[0] = diff[0];
for (int i = 1; i < diff.length; i++) {
    res[i] = res[i - 1] + diff[i];

这样构造差分数组 diff,就可以快速进行区间增减的操作,如果你想对区间 nums[i…j] 的元素全部加 3,那么只需要让 diff[i] += 3,然后再让 diff[j+1] -= 3 即可:
在这里插入图片描述原理很简单,回想 diff 数组反推 nums 数组的过程,diff[i] += 3 意味着给 nums[i…] 所有的元素都加了 3,然后 diff[j+1] -= 3 又意味着对于 nums[j+1…] 所有元素再减 3,那综合起来,是不是就是对 nums[i…j] 中的所有元素都加 3 了?

只要花费 O(1) 的时间修改 diff 数组,就相当于给 nums 的整个区间做了修改。多次修改 diff,然后通过 diff 数组反推,即可得到 nums 修改后的结果。

现在我们把差分数组抽象成一个类,包含 increment 方法和 result 方法:

// 差分数组工具类
class Difference {
    // 差分数组
    private int[] diff;
    
    /* 输入一个初始数组,区间操作将在这个数组上进行 */
    public Difference(int[] nums) {
        assert nums.length > 0;
        diff = new int[nums.length];
        // 根据初始数组构造差分数组
        diff[0] = nums[0];
        for (int i = 1; i < nums.length; i++) {
            diff[i] = nums[i] - nums[i - 1];
        }
    }

    /* 给闭区间 [i, j] 增加 val(可以是负数)*/
    public void increment(int i, int j, int val) {
        diff[i] += val;
        if (j + 1 < diff.length) {
            diff[j + 1] -= val;
        }
    }

    /* 返回结果数组 */
    public int[] result() {
        int[] res = new int[diff.length];
        // 根据差分数组构造结果数组
        res[0] = diff[0];
        for (int i = 1; i < diff.length; i++) {
            res[i] = res[i - 1] + diff[i];
        }
        return res;
    }
}

解题代码演示

class Solution {

      // 差分数组
    private int[] diff;
    public int[] corpFlightBookings(int[][] bookings, int n) {
        diff = new int[n];
        for(int i = 0; i < bookings.length;i++){
            //转成索引时 要减
            increment(bookings[i][0] - 1,bookings[i][1] - 1,bookings[i][2]);
        }

        return result();

    }

    public void increment(int i, int j, int val) {
        diff[i] += val;
        if(j + 1 < diff.length){
             diff[j + 1] -= val;
        }
    }  

    public int[] result(){
        int[]result = new int[diff.length];
        result[0] = diff[0];
        for(int i = 1;i < diff.length;i++){
            result[i] = result[i - 1] + diff[i];
        }
        return result;
    } 
}

上期经典

leetcode1094. 拼车

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/913257.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查询速度最高提升50倍!火山引擎ByteHouse在广告投放领域实践分享

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 据QuestMobile报告显示&#xff0c;移动互联网已经进入了下半场&#xff0c;在使用人数和使用时长方面已经没有明显增长&#xff0c;互联网已经流量趋于饱和。 作为…

【升职加薪秘籍】我在服务监控方面的实践(6)-业务维度的mysql监控

大家好,我是蓝胖子&#xff0c;关于性能分析的视频和文章我也大大小小出了有一二十篇了&#xff0c;算是已经有了一个系列&#xff0c;之前的代码已经上传到github.com/HobbyBear/performance-analyze&#xff0c;接下来这段时间我将在之前内容的基础上&#xff0c;结合自己在公…

电脑出现msvcp120.dll丢失的解决方法,教你三招快速解决

msvcp120.dll丢失是一件很常见的问题&#xff0c;出现msvcp120.dll丢失会导致电脑无法在正常运行&#xff0c;那么应该怎么解决这个问题呢&#xff0c;有什么办法可以快速的解决呢&#xff0c;今天教你三招快速解决msvcp120.dll丢失的方法。 一.msvcp120.dll文件丢失可能导致的…

深度学习入门(五):经典网络Alexnet实现

介绍 AlexNet是一个深度卷积神经网络架构&#xff0c;于2010年代初在深度学习重新引起人们关注时发挥了重要作用。它因在2012年的ImageNet大规模视觉识别挑战&#xff08;ILSVRC&#xff09;中获胜而闻名。 实现 创建了一个AlexNet网络的实例&#xff0c;并将一个随机生成的…

云服务之PaaS:PaaS怎么帮助企业走向云

一、前言 企业想要平滑地向云迁移&#xff0c;需要选择一个适合自己的云基础框架。PaaS(平台即服务)作为云计算的重要组成部分&#xff0c;可以为用户提供完整的应用生命周期管理和相关资源服务。开发人员可以在PaaS框架构建和自定义应用程序&#xff0c;这为企业大大地节省了金…

金桥跨越相伴岁月 桂冠加冕爱意时光 GP芝柏表铭刻相爱传奇 演绎浪漫七夕

两个多世纪以前&#xff0c;康士坦特芝勒德 (Constant Girard) 与玛莉亚柏雷戈 (Marie Perregaux) 喜结连理&#xff0c;两颗心灵在爱意中交织&#xff0c;二人将姓氏结合&#xff0c;创立“Girard-Perregaux”芝柏表&#xff0c;成为数百年来瑞士高级制表中仅有的以夫妻双人姓…

龙迅LT7911UX TYPE-C/DP转MIPI/LVDS,内有HDCP

1. 描述 LT7911UX是一种高性能的Type-C/DP1.4a到MIPI或LVDS芯片。HDCP RX作为HDCP中继器的上游端&#xff0c;可以与其他芯片的HDCP TX协同工作&#xff0c;实现中继器的功能。 对于DP1.4a输入&#xff0c;LT7911UX可以配置为1/2/4车道。自适应均衡使其适用于长电缆应用&#…

设计模式(9)建造者模式

一、 1、概念&#xff1a;将一个复杂对象的构造与它的表示分离&#xff0c;使得同样的构造过程可以创建不同的表示。建造者模式主要用于创建一些复杂的对象&#xff0c;这些对象内部构建间的顺序通常是稳定的&#xff0c;但对象内部的构建通常面临着复杂的变化&#xff1b;建造…

FUSE简单了解

FUSE是什么&#xff1f; FUSE&#xff08;filesystem in userspace&#xff09;是一个用户态文件系统框架。由内核模块&#xff08;fuse.ko&#xff09;、用户态库(libfuse.*)和挂载工具组成&#xff08;fusermount&#xff09; fuse最重要的特性是fuse可以允许安全、非特权挂…

设计师私藏的5个设计网站,你一定要知道。

这5个网站设计师都在用&#xff0c;找素材、找灵感一步到位&#xff0c;赶紧收藏~ 菜鸟图库 https://www.sucai999.com/?vNTYxMjky 菜鸟图库是一个非常大的素材库&#xff0c;站内包含设计、办公、自媒体、图片、电商等各行业素材。网站还为新手设计师提供免费的素材&#xf…

【C语言进阶(4)】指针和数组笔试题

文章目录 Ⅰ 一维数组Ⅱ 字符数组题型 1题型 2题型 3 Ⅲ 二维数组 数组名的意义 sizeof(数组名)&#xff0c;这里的数组名表示整个数组&#xff0c;计算的是整个数组的大小。&数组名&#xff0c;这里的数组名表示的是整个数组&#xff0c;取出的是整个数组的地址。除了上述…

*****独立看门狗总结实验

1、看门狗定时计算 看门狗的喂狗时间&#xff08;也就是看门狗溢 出时间&#xff09;的计算方式为&#xff1a; Tout((42^prer) rlr) /32 其中 Tout 为看门狗溢出时间&#xff08;单位为 ms&#xff09;。 prer 为看门狗时钟预分频值&#xff08;IWDG_PR 值&#xff09;&#…

OpenGL —— 2.3、绘制第一个三角形(附源码,glfw+glad)(更新!)

源码效果 C源码 vertexShader.glsl #version 330 corelayout(location 0) in vec3 aPos; layout(location 1) in vec3 aColor;out vec4 outColor;void main() {gl_Position vec4(aPos.x, aPos.y, aPos.z, 1.0);outColor vec4(aColor, 1.0); };fragmentShader.glsl #versi…

离散Fourier变换的一种理解方法

1. 离散Fourier变换的定义 一个信号 x 的离散Fourier变换(Discrete Fourier Transform&#xff0c;简记为DFT)定义为 &#xff0c; 其逆(inverse) Fourier变换(简记为 IDFT)定义为 。 (译注&#xff1a;符号“≜”表示“根据定义&#xff0c;左边等于右边”。) 其中&#x…

电脑连接手机热点无法访问 GitHub

电脑连接手机热点无法访问 GitHub 解决方案 修改本地请求配置 修改 Windows 中 hosts 文件&#xff0c;路径&#xff1a; C:\Windows\System32\drivers\etc 添加内容&#xff1a; 140.82.112.4 www.github.com 140.82.112.4 github.com 提示&#xff1a;Windows 有权限限制&am…

智慧班牌云平台源码 (人脸识别、信息发布、校园风采、家校互通、教务管理、考勤管理)

电子班牌是一款智慧校园的管理工具&#xff0c;也是校园的多媒体展示平台&#xff0c;智慧电子班牌系统是专为学校智慧教育设计的一款智慧校园的管理工具&#xff0c;融合了多媒体信息发布、校园风采、家校互通、教务管理、考勤管理、日常办公等一系列应用。具备智慧教育功能和…

Mybatis的动态SQL及关键属性和标识的区别(对SQL更灵活的使用)

&#xff08; 虽然文章中有大多文本内容&#xff0c;想了解更深需要耐心看完&#xff0c;必定大有受益 &#xff09; 目录 一、动态SQL ( 1 ) 是什么 ( 2 ) 作用 ( 3 ) 优点 ( 4 ) 特殊标签 ( 5 ) 演示 二、#和$的区别 2.1 #使用 ( 1 ) #占位符语法 ( 2 ) #优点 2.…

Mac Flutter web环境搭建

获取 Flutter SDK 下载以下安装包来获取最新的 stable Flutter SDK将文件解压到目标路径, 比如: cd ~/development $ unzip ~/Downloads/flutter_macos_3.13.0-stable.zip 配置 flutter 的 PATH 环境变量&#xff1a; export PATH"$PATH:pwd/flutter/bin" // 这个命…

java版数字藏品深色UI仿鲸探数藏盲盒合成短视频卡牌模式支持高并发

此版本为JAVA开发的版本 系统稳定 数据库MYSQL 前端uniapp 支持百万级用户&#xff0c;急速搭建 主要功能介绍 艺术品发售 藏品发售用户可以购买 后台藏品可设置不同稀有度 二级市场 用户的藏品可以直接挂售到二级市场商城 其他用户可以购买自己的藏品 合成 可以通过…

STM32 F103C8T6学习笔记12:红外遥控—红外解码-位带操作

今日学习一下红外遥控的解码使用&#xff0c;红外遥控在日常生活必不可少&#xff0c;它的解码与使用也是学习单片机的一个小过程&#xff0c;我们将通过实践来实现它。 文章提供源码、测试工程下载、测试效果图。 目录 红外遥控原理&#xff1a; 红外遥控特点&#xff1a; …