执行用时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. dubbo(四)

    前言 1.浅谈架构的发展 首先,要了解dubbo,就得了解,它是在什么背景下产生的?这就需要从架构的发展说起. 孟老师从事软件开发2008年份,那时候我上高一,那个时候,淘宝.京东都还没有火起来.那个 ...

  2. 第八篇 -- 对数据库mysql进行连接并压测

    参考链接:https://blog.csdn.net/laofashi2015/article/details/81296929 工具:mysql-8.0.12-winx64,apache-jmete ...

  3. Spring Cloud Alibaba基础教程:Nacos+Dubbo

    Spring Cloud Alibaba为分布式应用程序开发提供了一站式解决方案. 它包含开发分布式应用程序所需的所有组件,使您可以轻松地使用Spring Cloud开发应用程序.Dubbo是Alib ...

  4. decimal和float的区别

    场景 今天在开发的时候,在mongodb中有个字段保存的数据结构是decimal,然后需要对这个字段的值进行范围的查询.结果却怎么查询值范围都是空. 解决 如图中看到的,利用Navicat,可以明显的 ...

  5. vue中rem的转换

    1 function rems(doc: any, win: any): void { 2 let docEl = doc.documentElement, 3 resizeEvt = 'orient ...

  6. 优化SQL 查询性能

    为什么查询会很慢 如果把查询看作是一个任务,那么它由一系列子任务组成,每个子任务都会消耗一定的时间.要优化查询,实际上是要优化其子任务,要么消除其中一些子任务,要么减少子任务的执行次数,要么让子任务运 ...

  7. 字节跳动Android面试凉凉,挥泪整理面筋,你不看看吗?

    想在金九银十找工作的现在可以开始准备了,这边给大家分享一下面试会遇到的问题. 找工作还是需要大家不要担心,由于我们干这一行的接触人本来就不多,难免看到面试官会紧张,主要是因为怕面试官问的答不上来,答不 ...

  8. 用于在公网环境下测试的Telnet/SSH服务器

    google: public telnet server list for example: telnet nethack.alt.org ssh nethack@alt.org

  9. pikachu Unsafe Filedownload 不安全的文件下载

    不安全的文件下载概述文件下载功能在很多web系统上都会出现,一般我们当点击下载链接,便会向后台发送一个下载请求,一般这个请求会包含一个需要下载的文件名称,后台在收到请求后 会开始执行下载代码,将该文件 ...

  10. vue项目中踩过的element的坑

    前言:在现在这种大的社会背景下,人们的需求更加的个性化了,而之前为了解放开发复杂的原生开发状态,现有的组件库已经远远不能满足人们高质量的需求了,这两天开发发现了一些element UI交互上的缺陷,当 ...