前缀、差分数组+应用【思维导图】

在这里插入图片描述
前缀和讲解

前缀、差分

差分

场景

  • 频繁对原始数组的某个区间的元素进⾏增减

构造diff 差分数组

  • 思路

    • 对区间 nums[i…j] 的元素全部+x
      只需要让 diff[i] += x,diff[j+1] -= x

      • 根据反推
        diff[i] += x :给 nums[i]后所有的元素加x
        diff[j+1] -= x :给nums[j+1]后所有元素减x 合并即为对区间[i…j] 中的所有元素都加x

      • diff[i] = nums[i] - nums[i - 1];

        • 反推:res[i] = res[i - 1] + diff[i];

应用

  • 370.区间加法

  • 1109.航班预订统计

    • 注意索引与元素对应

      • 暴力

        • 差分
  • 1094.拼⻋

    • 1、站点最多1000,准备容量为1000的数组存放每一站的乘客数量,上车加下车减,同时把数组中记录的每站乘客数量与capacity比较,超载返回false

      • 直接记录上下车的容量变化情况,内存没变化,但是效率提升很快

        • dif[trip[1]] += trip[0];
          dif[trip[2]] -= trip[0]; 初始化差分数 ,上车(start)加下车(end)减

      • 把一路上的负载数组构造出来,比较什么时候负载超重

    • 利用map记录(站点,人数),每站将上车人数与之前记录的人数相加,并判断此时是否超载

前缀

场景:构造前缀数组快速计算区间和

一维前缀

  • 303.数组区域和

    • preSum[i] = preSum[i - 1] + nums[i - 1];
      preSum[i]:元素i之前的数组元素之和

        - 暴力
      
  • 学生某区间段成绩人数

    • count[i] = count[i-1]+count[i];
      count[i]:i成绩分布人数

二维前缀

  • 304.二维区域和检索

    • 二维数组preSum[i][j]:
      以{0,0},{i,j}分别为左上右下的矩阵的元素和

前缀 哈希优化

  • 560.和为K的子数组

    • 构造前缀和优化区间和计算 暴力穷举数组找=k
    • 穷举循环条件复杂度为o(n²),if条件移项
      利用哈希表记录直接更新结果避免for的双层循环
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值