总结
- 如果涉及到一整个区间值的频繁修改,那么就需要考虑使用差分数组了。
相关例题有: - 1109.航班预订统计
- 得分最高的最小轮调 【这题不会写】
例题一
1. 题目
2. 分析
差分数组的表示:diff[i] = arr[i]-arr[i-1]
。这就表示当前值减去上一个值,diff[0]= arr[0]
。
- step1. 得到差分数组,当我们得到差分数组后,
- step2. 如果是对整个区间的修改,可以简化成只对区间端点的修改,这样就可以简化算法复杂度。
3. 代码
1.题目
2.分析
差分数组经典模板题了。
3.代码
class Solution:
def corpFlightBookings(self, bookings: List[List[int]], n: int) -> List[int]:
diff = [0] *(n+2)
# 利用差分数组求解
for i in range(len(bookings)):
left,right,num = bookings[i]
diff[left]+=num
diff[right+1] -= num
ans = [0] * (n+2)
for i in range(1,len(diff)):
ans[i] = ans[i-1] + diff[i]
return ans[1:-1]