Range Addition
2016-07-20 08:03
316 查看
Assume you have an array of length n initialized with all 0's and are given k update operations.
Each operation is represented as a triplet: [startIndex, endIndex, inc] which increments each element of subarray A[startIndex ... endIndex] (startIndex and endIndex inclusive) with inc.
Return the modified array after all k operations were executed.
Example:
Explanation:
思路:是根据hint得来的,我觉得面试的时候,很难想到这种方法;
具体解释就是:不用update range里面的所有元素,把所有赋值update的过程,全部用最后累加的时候来计算,往后延伸,
startindex的时候赋值inc,在endindex+1的时候赋值-inc,目的是为了值往后累加的时候,到endindex+1的时候就不往后传递了。终止符。
比如说加个1,000100000-10000, 然后往后累加,1就会往后传递,直到-1的时候就为0,不往后传递了。
Each operation is represented as a triplet: [startIndex, endIndex, inc] which increments each element of subarray A[startIndex ... endIndex] (startIndex and endIndex inclusive) with inc.
Return the modified array after all k operations were executed.
Example:
Given: length = 5, updates = [ [1, 3, 2], [2, 4, 3], [0, 2, -2] ] Output: [-2, 0, 3, 5, 3]
Explanation:
Initial state: [ 0, 0, 0, 0, 0 ] After applying operation [1, 3, 2]: [ 0, 2, 2, 2, 0 ] After applying operation [2, 4, 3]: [ 0, 2, 5, 5, 3 ] After applying operation [0, 2, -2]: [-2, 0, 3, 5, 3 ]
思路:是根据hint得来的,我觉得面试的时候,很难想到这种方法;
具体解释就是:不用update range里面的所有元素,把所有赋值update的过程,全部用最后累加的时候来计算,往后延伸,
startindex的时候赋值inc,在endindex+1的时候赋值-inc,目的是为了值往后累加的时候,到endindex+1的时候就不往后传递了。终止符。
比如说加个1,000100000-10000, 然后往后累加,1就会往后传递,直到-1的时候就为0,不往后传递了。
public class Solution { public int[] getModifiedArray(int length, int[][] updates) { int[] array = new int[length]; for(int i=0; i<updates.length; i++){ int start = updates[i][0]; int end = updates[i][1]; int k = updates[i][2]; array[start] +=k; if(end+1<array.length){ array[end+1] -= k; } } for(int i=1; i<array.length; i++){ array[i] += array[i-1]; } return array; } }
相关文章推荐
- 699B - One Bomb
- 网络虚拟化
- Android之控件按下抬起变色样式
- java华氏温度与摄氏度的互相转换
- Android之获取控件的坐标
- 死锁产生的原因&&必要条件&&如何避免死锁
- 杭电OJ2030-汉字统计
- JSON 解析 网络 上 天气预报
- Android 圆形的TextView
- leetcode-283. Move Zeroes c语言
- [Ext4] Ext4文件系统分析系列文章
- [Ext4] Ext4文件系统分析系列文章
- [文章摘要] Stories in GeoTime
- Android 布局管理器
- linux笔记:linux常用命令-用户管理命令
- 不知所云
- 常用类 Math类
- django model meta类定义abstract = True
- 通讯录之一Transform动画
- models.DateTimeField(auto_now_add=True)与models.DateTimeField(auto_now=True)