差分数组技巧 [labuladong-刷题打卡 day4]
继前缀和之后,差分数组算法随之而出!
所谓差分,即采用和前序数的差标记此数,最后对前序差分使用前缀和,就可以得到真值。
由于都采用差分表述,那么改变前序的一个值,势必会对后续整体造成影响,But!
如果输入本就是要求对连续数进行操作,那么就可以把这种‘劣势’转为优势啦!
最后只需要在待操作连续子数组后一个书,添加一个反向差值,那么就可以消除对后续数组的影响
例题:
1109. 航班预订统计
class Solution {
public:
vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {
vector<int> diff(n);//差分数组
for(auto& booking :bookings){//auto关键字 使用迭代器对vector便利,由于是数组,所以需要&
diff[booking[0]-1]+=booking[2];
if(booking[1]<n) //判断操作子数组末尾是否超过整体数组,操作则不需要对后续数组消除影响
diff[booking[1]]-=booking[2];//消除第i+1个开始的后续数组影响
}
for(int i=1;i<n;i++){//前缀和计算真值
diff[i]+=diff[i-1];
}
return diff;
}
};
本文来自博客园,作者:Alan-Blog,转载请注明原文链接:https://www.cnblogs.com/alanjiang/p/17605377.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步