day 03 前缀和(一)

206 阅读2分钟
  1. 基本前缀和
    • 前缀和数组Si=a1+a2+...+aiS_i=a_1+a_2+...+a_iS0=0S_0=0
    • 前缀和的求法实现
    • 前缀和的作用:前缀和的主要作用是快速计算数组中某一段数的和。通过预先计算并存储每个位置的前缀和,可以在 O(1) 的时间复杂度内获取任意一段数的和,而不需要重复计算。这对于需要频繁进行区间和查询的问题非常有用。
    • 前缀和的缺点:
      • 需要额外的空间:为了存储前缀和数组,需要额外的 O(n) 空间,增加了存储开销。
      • 不适用于动态数组:如果数组元素会发生变化,每次发生变化都需要重新计算前缀和数组,导致计算效率下降。
    • 一维前缀的时间复杂度:因为是遍历一遍数组a就可以得到前缀和数组,所以前缀和的时间复杂度是O (n)。 如果是m次查找的话,即为O (n+m)的时间复杂度。
    • 实现思路:
    •     输入整数的个数和求和次数。
          输入整数,并将其存入一个向量(vector)中。
          创建一个前缀和向量 S,并初始化为 0。
          遍历原始数组,计算前缀和并将其存入向量 S 中。
          通过多次查询,输入求和的范围,并输出对应范围内的和。        
      
    • 基本实现:

code.png

  1. 二维前缀和
    • 相比一维前缀和仅仅多了一维具体方法类似
    • 求某一段和变成了S(x2y2)S(x1y2)S(x2y1)+S(x1y1)S_(x_2y_2)-S_(x_1y_2)-S_(x_2y_1)+S_(x_1y_1) 这个关系可以通过画图得出
    • 具体实现:(不知道这里为什么一定要把vector限制范围才能跑起来)

code.png

最后唠两句,这个活动居然只要求500字但是代码量不能高于百分之五十,属实有点麻。不如一天只更一个算法,还能偷懒。