370. Range Addition


June-17-2019

第一反应是线段树。
第二反应是我他妈是个傻逼吧,跟线段树有什么关系。
比较直观的做法就是每个都扫一下,然后按部就班+-。
另一个做法,update[i]代表从i开始往后都要+几,比如
[1, 3 ,1]可以标记为update[1] = 1, update[4] = -1,代表1之后要+1,直到加到3为止,所以3后面要减去1,很巧妙。希望能从interval的题里找到相似的应用。

    public int[] getModifiedArray(int length, int[][] updates) {
        int[] changing = new int[length];
        
        for (int[] update : updates) {
            changing[update[0]] += update[2];
            if (update[1] < length - 1) changing[update[1] + 1] -= update[2];
        }
        
        int increment = 0;
        for (int i = 0; i < length; i ++) {
            increment += changing[i];
            changing[i] = increment;
        }
        
        return changing;
    }
posted @ 2016-10-07 12:36  哇呀呀..生气啦~  阅读(180)  评论(0编辑  收藏  举报