370. Range Addition

2017-08-26  本文已影响0人  Jeanz

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 ]

一刷
题解:把update的value存在nums[left], -value存在nums[right+1], 然后从左到右累加。

class Solution {
    public int[] getModifiedArray(int length, int[][] updates) {
        //length: the length of the array
        int[] nums = new int[length];
        for(int[] entry : updates){
            int left = entry[0], right = entry[1], value = entry[2];
            nums[left] += value;
            if(right<length-1) nums[right+1] = -value;
        }
        
        int res = 0;
        for(int i=0; i<length; i++){
            res += nums[i];
            nums[i] = res;
        }
        return nums;
    }
}
上一篇下一篇

猜你喜欢

热点阅读