前缀和:求某个区间的累加和
要求i->j区间的累加和:先求出前缀和(前缀和的第一个位置为0),第j+1个位置的元素 - 第i个位置的元素 = i->j区间的累加和
前缀和:arr = [1,2,3,4,5] preSum = [0,1,3,6,10,15]
差分数组:将某个区间的全部元素以O(1)的时间复杂度加上一个数或者减去一个数,当频繁的对一个数组进行这种操作时有用
要将i->j区间的元素全部加3:先求出差分数组,第i个位置+3,第j+1个位置-3,相当于 i 以后的每个元素都+3,j+1以后的每个元素都-3,那么就是i->j的每个元素+3;
差分数组:arr = [1,2,3,4,5] --> diff = [1,1,1,1,1]
例如将1-3的每个数加2:diffAfter = [1,3,1,1,-1];可以用O(n)的时间复杂度还原数组:arr[i] = diffAfter[i] + diffAfter[i-1];
差分数组:使数组互补所需的最少次数
差分数组+前缀和:航班预定统计、检查区域内是否所有数都被覆盖