您的位置:首页 > 其它

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:
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;
    }
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: