差分数组----

老规矩,先挂上参考文章

https://blog.csdn.net/qq_31601743/article/details/105352885 

力扣1109.航班预订信息

输入: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]

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/corporate-flight-bookings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

题目就是这样式的 完整题目可以去力扣去看

我使用暴力解法,可以实现并且没有超时

var corpFlightBookings = function(bookings, n) {
  let answer =Array(n).fill(0)
    bookings.map((item)=>{
        for(let i = item[0];i<=item[1];i++){
            // answer[i-1] = 0+item[2];
            // if(answer[i-1] !== 0){
                answer[i-1] = answer[i-1]+item[2];
            // }
            
            
        }
    })
    return answer;

};

然后看了官方解法,学会差分数组,简单方便

差分数组原理:

 

附上实现代码

var corpFlightBookings = function(bookings, n) {
   let answer =Array(n).fill(0);
//新建一个数组,这个数组的差分数组和自身长得一样
//[0,0,0,0,0,0]的差分数组就是[0,0,0,0,0,0]
        for(const item of bookings){
        answer[item[0]-1] += item[2];
         if (item[1] < n) {
        answer[item[1]] -= item[2];
         }
    }
//对差分数组进行一系列操作之后,得到一个最后的差分数组
//再得到最终的数组
    for(let i = 1;i<n;i++){
        answer[i] += answer[i-1]
    }
    return answer
};

查分数组用途:
1.对数组中的一些数进行指定数值的增加或减少

2.频繁的对数组中一部分数进行操作

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值