• 差分


    leetcode 1109:https://leetcode-cn.com/problems/corporate-flight-bookings/

    这是我刷题过程中第一道运用差分思想的题目;题意很简单,给定多个需求[起点,终点,航班数],序号为[起点,终点]之间的每个航班都被预定了需求中的航班数。

    这是一道模版题,看了题解中三叶(超感谢!!)的讲解主要是维护一个差分数组c

                               c[l]+=v 代表[l,末尾]区间内的航班数都加上v

         但是我们的需求是[l,r]区间内航班加上v,所以很妙的地方来了,我们需要使得:c[r+1]-=v. 这样就代表r+1及以后的航班都减去v,从而消除了上一步对r+1及以后的航班的影响

         最后计算每个航班拥有的航班数利用了前缀思想: ans[i]=ans[i-1]+c[l];

    class Solution {
    public:
        vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
            vector<int> c(n+2,0);
            for(int i=0;i<bookings.size();i++){
                vector<int> book=bookings[i];
                int l=book[0]-1,r=book[1]-1,v=book[2];
                c[l]+=v;
                c[r+1]-=v;
            }
            vector<int> ans;
            ans.push_back(c[0]);
            for(int i=1;i<n;i++){
                ans.push_back(ans[i-1]+c[i]);
            }
            return ans;
        }
    };
  • 相关阅读:
    Linux源码Kconfig文件语法分析
    从0移植uboot (一) _配置分析
    ARM汇编与C混合编程
    ARM汇编程序结构
    ARMGNU伪指令
    Linux tcp黏包解决方案
    Linux 服务器模型小结
    Linux IPC udp/tcp/UNIX域 socket编程
    Linux IPC socket 广播,组播
    Linux I/O多路复用
  • 原文地址:https://www.cnblogs.com/pipihoudewo/p/15984123.html
Copyright © 2020-2023  润新知