370.区间加法
题解
- 一、题目描述
- 二、示例
- 三、难度
- 四、理解
- 五、代码
-
- Java版(差分数组)
一、题目描述
二、示例
三、难度
中等
四、理解
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+" "); }}
阅读世界,共赴山海 423全民读书节,邀你共读