You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++ vector区间增量更新的高效替代遍历方案问询

问题解答

存在,用差分数组方案就能把单次区间更新的时间复杂度从O(r-l+1)降到O(1),如果后续需要获取全量最终数组,再统一做一次前缀和计算即可,适合有多次区间更新、最后统一取结果的场景。

实现逻辑

  • 先构造一个和原数组大小相同的差分数组diff,初始所有元素为0
  • 单次对区间[l, r]执行加k操作时,仅需要完成两个赋值操作:
    • diff[l] += k
    • 如果r+1小于数组总长度,执行diff[r+1] -= k
  • 所有区间更新操作完成后,对diff数组计算前缀和,得到的就是最终的原数组

示例验证

你给出的示例初始v长度为7,l=2、r=5、k=1:

  1. 差分数组初始为[0,0,0,0,0,0,0]
  2. 执行diff[2] += 1、diff[6] -=1,得到更新后的差分数组[0,0,1,0,0,0,-1]
  3. 对差分数组计算前缀和:
    • 第0位:0 → 原数组v[0]=0
    • 第1位:0+0=0 → v[1]=0
    • 第2位:0+1=1 → v[2]=1
    • 第3位:1+0=1 → v[3]=1
    • 第4位:1+0=1 → v[4]=1
    • 第5位:1+0=1 → v[5]=1
    • 第6位:1 + (-1) =0 → v[6]=0
      最终结果和预期完全一致。

适用场景说明

如果你的使用场景只需要做单次区间更新、更新后立刻要随机访问某个位置的元素,那差分数组需要额外的前缀和计算步骤,优势不明显;但如果存在多次区间更新操作,最后才需要获取完整数组或者批量访问结果,差分数组的性能提升会非常显著,更新次数越多收益越高。

内容的提问来源于stack exchange,提问作者Sanket Kale

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 16:54:04