> 文档中心 > 370.区间加法

370.区间加法

题解

  • 一、题目描述
  • 二、示例
  • 三、难度
  • 四、理解
  • 五、代码

一、题目描述

在这里插入图片描述

二、示例

在这里插入图片描述

三、难度

中等

四、理解

index 0 1 2 3 4 5 6
nums(初始) 5 8 7 4 6 2 9
i>0,diff[i] = nums[i] - nums[i-1] 5 3 -1 -3 2 -4 7
res[i] = diff[i] + res[i-1] 5 8 7 4 6 2 9

若要使区间[2,4]的元素加2,根据用diff反推nums(res[i] = diff[i] + res[i-1])可知,对nums的区间所有元素增减操作,可在diff上进行,再反推

1. diff[2] + 2时,根据反推说明给 nums[2…] 所有的元素都加了 2
在这里插入图片描述
2. 要求只在[2,4]上的元素+2,则将diff[5] - 2即可
在这里插入图片描述

五、代码

Java版(差分数组)

/** * @author Kidd * @create 2022-04-19 20:00 */public class Solution {    private int[] diff;    public int[] getModifiedArray(int[][] updates, int length) { //初始化数组元素都为0 int[] nums = new int[length]; diff = new int[length]; //构造差分数组 //因nums[0]前面没有元素,认为其为0,实际上diff[0] = nums[0] - 0 diff[0] = nums[0]; for (int i = 1; i < length; ++i) {     diff[i] = nums[i] - nums[i - 1]; } for(int[] outer : updates) {     diff[outer[0]] += outer[2];     if(outer[1] + 1 < length)  diff[outer[1] + 1] -= outer[2]; } //存放最终数组 int[] res = new int[diff.length]; res[0] = diff[0]; for (int i = 1; i < length; ++i) {     res[i] = res[i - 1] + diff[i]; } return  res;    }    public static void main(String[] args) { int length = 5; int[][] updates = {  {1, 3, 2},  {2, 4, 3},  {0, 2, -2} }; Solution s = new Solution(); int[] modifiedArray = s.getModifiedArray(updates, length); for(int num : modifiedArray)     System.out.print(num+" ");    }}

370.区间加法 阅读世界,共赴山海 370.区间加法 423全民读书节,邀你共读