执行用时2ms,击败100%用户

内存消耗52.1MB,击败91%用户

这也是我第一次用差分数组,之前从来没有碰到过,利用差分数组就是利用了差分数组在某一区间内同时加减情况,只会改变最左边和最右边+1的位置上的值。区间最左边同步加减,区间最右边同步加减其相反数。

例如有一原始数组为[2,5,4,7,10,1]

获得的差分数组为[2,3,-1,3,3,-9]

第一步:0-3区间的同步加6

则此时原始数组为[2+6,5+6,4+6,7+6,10,1]

获得的差分数组为[2+6,3,-1,3,3-6,-9]

第二步:2-4区间的同步加3

则此时原始数组为[2+6,5+6,4+6+3,7+6+3,10+3,1]

获得的差分数组为[2+6,3,-1+3,3,-3,-9-3]

可以看出其规律,差分数组对应d[i]=a[i]+a[i-1]

且如果在[m,n]区间同时相加x,那么在差分数组内只有最左边的边缘a改变同步加减,即d[m]=a[m]+x-a[m-1]=(a[m]-a[m-1])+x=d[m]+x

而最右边加了一个数,因为最右边加一的位置会产生变化,即d[n]=a[n]-(a[n-1]+x)=d[n]-x

因此在此题中,只需将其初始化为0的差分数组,然后对应相加减即可。

普通未优化的差分数组

class Solution {
public int[] corpFlightBookings(int[][] bookings, int n) {
int [] anser = new int[n];
for (int i=0;i<bookings.length;i++){
anser[bookings[i][0]-1] +=bookings[i][2];
if (bookings[i][1]<=n-1){
anser[bookings[i][1]] -= bookings[i][2];
}
} // for (int i=1;i<n;i++){
// anser[i]=anser[i]+anser[i-1];
// }
for (int i =0;i<n;i++){
if (i==0){
}else {
anser[i]=anser[i]+anser[i-1];
}
}
return anser;
}
}

此时在while循环中需要大量的判断,因此用空间换时间,新建差分数组是我们对留两个,一个留给0的位置,一个留给n+1的位置,这样边间的处理也都在while循环中,结束后再进行重新的赋值,此时时间复杂度最低!

class Solution {
public int[] corpFlightBookings(int[][] bookings, int n) {
int [] anser = new int[n+2];
int [] anser2 = new int[n];
for (int i=0;i<bookings.length;i++){
anser[bookings[i][0]] +=bookings[i][2];
anser[bookings[i][1]+1] -= bookings[i][2];
} for (int i =0;i<n;i++){
anser[i+1] = anser[i]+anser[i+1];
}
for (int i=1;i<=n;i++){
anser2[i-1]=anser[i];
}
return anser2;
}
}

[leetcode]1109. 航班预订统计(击败100%用户算法-差分数组的详解)的更多相关文章

  1. 【转】MySQL用户管理及SQL语句详解

    [转]MySQL用户管理及SQL语句详解 1.1 MySQL用户管理 1.1.1 用户的定义 用户名+主机域 mysql> select user,host,password from mysq ...

  2. Linux用户、用户组权限管理详解 --- 02

    2,用户.用户组管理操作详解: 2.1 adduser 添加用户: adduser [-u uid][-g group][-d home][-s shell] -u:直接给出userID        ...

  3. NO29 用户提权sudo配置文件详解实践--志行为审计

     用户提权sudo配置文件详解实践: 放到visudo里:  验证权限:

  4. 微信企业向用户银行卡付款API开发详解(PHP)

    最近在实现微信企业向用户银行卡付款时遇到了一些问题,发现官方文档说的太笼统,走了不少弯路,想要在此记录,希望可以帮到大家. 案例:企业付款到银行卡    微信接口链接:https://api.mch. ...

  5. Spring Security教程(八):用户认证流程源码详解

    本篇文章主要围绕下面几个问题来深入源码: 用户认证流程 认证结果如何在多个请求之间共享 获取认证用户信息 一.用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求 ...

  6. Linux用户、用户组权限管理详解

    Linux用户管理三个重要文件详解: Linux登陆需要用户名.密码./etc/passwd 文件保存用户名.登录Linux时,Linux 先查找 /etc/passwd 文件中是否有这个用户名,没有 ...

  7. vsftpd 配置用户及根目录及其参数详解

    vsftpd 常用功能参数配置及参数详解 Table of Contents 1. 配置超级服务 2. 配置匿名用户 3. 配置本地用户登录 4. 配置虚拟用户登录 5. 使用SSL登入 6. 日志文 ...

  8. 支撑5亿用户、1.5亿活跃用户的Twitter最新架构详解及相关实现

    如果你对项目管理.系统架构有兴趣,请加微信订阅号"softjg",加入这个PM.架构师的大家庭 摘要:Twitter出道之初只是个奋斗在RoR上的小站点,而如今已拥有1.5亿的活跃 ...

  9. Linux用户态程序计时方式详解

    前言 良好的计时器可帮助程序开发人员确定程序的性能瓶颈,或对不同算法进行性能比较.但要精确测量程序的运行时间并不容易,因为进程切换.中断.共享的多用户.网络流量.高速缓存访问及转移预测等因素都会对程序 ...

随机推荐

  1. 简单快速安装Apache+PHP+MySql服务环境(二)—— centos使用yum安装php5.6

    使用默认方式yum install php安装的php版本为5.4,在使用某些PHP框架的时候可能会有问题,所以需要安装高版本的PHP. 通过yum list php*查看是否有自己需要安装的版本,如 ...

  2. P5311 [Ynoi2011] 成都七中

    P5311 [Ynoi2011] 成都七中 题意 给你一棵 \(n\) 个节点的树,每个节点有一种颜色,有 \(m\) 次查询操作. 查询操作给定参数 \(l\ r\ x\),需输出: 将树中编号在 ...

  3. 期望长度P1365,CF235B,P1654

    期望长度 定义 这里期望长度表示一段序列连续长度的期望.具体来说,对于一段序列,每个点都有一个概率连续和断开.求所有连续序列和的期望. 当然,对于以上期望长度的定义,我们只需要求出每个点存在的期望的和 ...

  4. 第三篇 -- HTML基础

    买的课程学习 Web 前端标准 web前端技术指的不是某一项技术,而是一系列技术的集合,主要包括: html -- 结构标准:负责网页结构的搭建 css -- 样式标准/表现标准:负责网页的美化工作 ...

  5. Centos配置网络和主机映射

    目录 虚拟机网络的三种配置方式 配置虚拟机IP 主机映射问题 配置虚拟机的主机名 虚拟机远程登录 虚拟机网络的三种配置方式 桥接模式:当前虚拟机与主机在同一个局域网下,同一个局域网下的所有电脑都可以访 ...

  6. dubbo学习实践(1)之管理控制台Dubbo-admin部署

    1.Docker拉取现有镜像,构建Dubbo-admin 拉取镜像,这里使用chenchuxin/dubbo-admin docker pull chenchuxin/dubbo-admin 注册中心 ...

  7. spring boot中连接数据库报错500(mybatis)

    spring boot中连接数据库报错500(mybatis) pom.xml中的依赖 <!-- 集成mybatis--> <dependency> <groupId&g ...

  8. 神经网络:numpy实现神经网络框架

    欢迎访问个人博客网站获取更多文章: https://beityluo.space 本文用numpy从零搭建了一个类似于pytorch的深度学习框架 可以用于前面文章提到的MINST数据集的手写数字识别 ...

  9. CAS 5.3使用MySQL数据库验证

    一.本例环境说明 JDK 1.8 CAS 5.3 apache-maven-3.6.0 mysql-5.6.32 二.CAS 5.3基础环境搭建与验证 需要按照<CAS 5.3服务器搭建> ...

  10. WPF中Converter的使用

    WPF中Converter的用于对数据的转换.以下实例将实现将数据中的性别属性的转换(0:男,1:女). 1.创建SexConverter.cs类,并实现IValueConverter接口 publi ...