新学到的知识点:前缀和+差分的妙用

今天刷到一个题。典型的前缀和+差分解法的题。简直妙不可言,故提笔记之

题目如下

在这里插入图片描述
这是一道很典型的对n个区间进行增量。若是我们用暴力法的话,那事件复杂度将会是n*m。而区间问题恰好是差分所能解决的领域。而且差分的前缀和就是原数组。所以我们可以将这个题分成两步

  1. 初始化差分数组
  2. 对差分数组求前缀和,得到原数组

代码如下:

class Solution {
public:
    vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
        //差分;
        vector<int> ans(n, 0);
        for(auto &e: bookings){
            ans[e[0]-1]+=e[2];
            if(e[1]<n)ans[e[1]]-=e[2];
        }
        //做前缀和
        for(int i=1;i<n; i++){
            ans[i]+=ans[i-1];
        }
        return ans;
    }
};

虽然这代码只有短短几行,但却是充满了智慧。又深刻的感受到了算法的魅力了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值