跳至内容

前缀和介绍


来看下代码:

public class PrefixSum {
    int[] preSum;//前缀和数组。

    public PrefixSum(int[] nums) {
        preSum = new int[nums.length + 1];
        // 计算前缀和。
        for (int i = 0; i < nums.length; i++)
            preSum[i + 1] = preSum[i] + nums[i];
    }

    // 统计闭区间[left,right]内的元素和,这里注意偏移量。
    public int sumRange(int left, int right) {
        return preSum[right + 1] - preSum[left];
    }
}

二维前缀和

二维前缀和处理的是二维数组,和一维数组类似,只不过相加和相减的时候会有点区别,二维前缀和的计算公式如下,如果原二维数组是 m*n 的矩阵,为了方便计算,前缀和二维数组就是 (m+1)*(n+1) 的矩阵,所以后面是加上 matrix[i – 1][j – 1] 而不是 matrix[i][j] 。

 preSum[i][j] = preSum[i - 1][j] + preSum[i][j - 1] - preSum[i - 1][j - 1] + matrix[i - 1][j - 1];

相加的时候因为 preSum[i – 1][j] 和 preSum[i][j – 1] 有重叠部分 preSum[i – 1][j – 1] ,所以需要减掉。


求矩形区间和的时候需要知道矩形的左上角和右下角的坐标,比如计算左上角 (a,b) 到右下角 (i,j) 所围成的矩形区间和,公式如下。

preSum[i][j] - preSum[a - 1][j] - preSum[i][b - 1] + preSum[a - 1][b - 1];

相减的时候因为会多减,所以需要加上多减的,如下图所示。


代码如下:

class TwoPrefixSum {
    int[][] preSum;// 二维前缀和数组。

    public TwoPrefixSum(int[][] matrix) {
        int m = matrix.length;
        int n = matrix[0].length;
        // 这里为了方便计算,二维数组preSum的宽和高都增加1。
        preSum = new int[m + 1][n + 1];
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                // 前缀和公式
                preSum[i][j] = preSum[i - 1][j] + preSum[i][j - 1]
                        - preSum[i - 1][j - 1] + matrix[i - 1][j - 1];
            }
        }
    }

    // (a, b)是左上角坐标,(i, j)是右下角坐标,他们是原数组的坐标,在二维前缀和数组
    // 中相当于(a+1, b+1)和(i+1, j+1),所以要注意偏移量。
    public int sumRange(int a, int b, int i, int j) {
        return preSum[i + 1][j + 1] - preSum[a][j + 1]
                - preSum[i + 1][b] + preSum[a][b];
    }
}

经过两年的打磨,我的新作 《算法秘籍》已经完成,后面我会通过视频号直播的方式把书上的知识点都讲一遍,有需要的可以点击购买。也可以点击 内容介绍 查看详情。

深圳SEO优化公司通化网站推广系统报价固原百度竞价包年推广报价玉林seo网站推广推荐宜宾网站改版推荐铜仁百搜标王哪家好商丘网站优化按天计费哪家好木棉湾百姓网标王推广推荐定西建设网站价格湖州网站搭建多少钱松岗外贸网站建设公司沈阳企业网站设计哪家好吉安关键词按天计费多少钱北海百度标王推荐红河关键词排名价格天水建网站多少钱沙井网站设计模板梅州网站改版推荐安阳网站推广工具报价黔西南百度竞价包年推广价格嘉兴网站优化软件秦皇岛网站制作多少钱韶关网站改版哪家好安阳关键词排名推荐昆明网站开发报价济源SEO按天计费公司巴中网站推广工具凉山网站建设设计公司安顺网页制作多少钱邵阳网络营销推荐醴陵网站优化软件哪家好歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化