1314. Matrix Block Sum 详细解答

本文详细解析LeetCode 1314题——Matrix Block Sum,提供两种解法。解法1是暴力求解,但时间复杂度高,不推荐。解法2利用累加求和,通过构建左上角累加矩阵,降低时间复杂度,提高效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1314. Matrix Block Sum 详细解答

在这里插入图片描述
解法1: Brute Force
题目理解:求出距离某个元素为K的所有元素的累加和。
比如:[[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]]

元素4,若 k=1。
距离元素4为1的元素包括1, 2, 5, 7, 8, 最后得到的累加和为 1+2+4+5+7+8 = 27.
所以答案中在元素4的位置变为了27

暴力求解的方式很简单,在遍历到每一个元素时,直接求出距离为k的所有元素累加和即可。

代码如下:
在这里插入图片描述
问题:复杂度太高,执行太耗时,不推荐。

解法2:累加求和
在这里可以采用左上角累加求和的方式来进行解答
比如:[[1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]]

通过左上角求和即可得到:[ [1, 3, 6],
            [5 12, 21],
            [12, 27, 45]]

然后通过以下方式进行求和:在这里插入图片描述

举例说明:
在这里插入图片描述
在这里插入图片描述
这样即可求解。
注明图片来源:https://leetcode.com/problems/matrix-block-sum/discuss/482730/Python-O(-m*n-)-sol.-by-integral-image-technique.-90%2B-with-Explanation

代码如下:
在这里插入图片描述

Error in getGlobalsAndPackages(expr, envir = envir, globals = globals): The total size of the 10 globals exported for future expression (‘FUN()’) is 561.48 MiB.. This exceeds the maximum allowed size of 500.00 MiB (option 'future.globals.maxSize'). The three largest globals are ‘FUN’ (421.11 MiB of class ‘function’), ‘object’ (140.21 MiB of class ‘S4’) and ‘as.matrix’ (105.36 KiB of class ‘function’) Traceback: 1. NormalizeData.Seurat(st_data, normalization.method = "CLR", margin = 2, . notification = function(p) pb$update(p)) 2. NormalizeData(object = object[[assay]], normalization.method = normalization.method, . scale.factor = scale.factor, verbose = verbose, margin = margin, . ...) 3. NormalizeData.StdAssay(object = object[[assay]], normalization.method = normalization.method, . scale.factor = scale.factor, verbose = verbose, margin = margin, . ...) 4. NormalizeData(object = LayerData(object = object, layer = l, . fast = NA), normalization.method = normalization.method, . scale.factor = scale.factor, margin = margin, verbose = verbose, . ...) 5. NormalizeData.V3Matrix(object = LayerData(object = object, layer = l, . fast = NA), normalization.method = normalization.method, . scale.factor = scale.factor, margin = margin, verbose = verbose, . ...) 6. future_lapply(X = 1:ncol(x = chunk.points), FUN = function(i) { . block <- chunk.points[, i] . data <- if (margin == 1) { . object[block[1]:block[2], , drop = FALSE] . } . else { . object[, block[1]:block[2], drop = FALSE] . } . clr_function <- function(x) { . return(log1p(x = x/(exp(x = sum(log1p(x = x[x > 0]), . na.rm = TRUE)/length(x = x))))) . } . args <- list(data = data, scale.factor = scale.factor, verbose = FALSE, . custom_function = clr_function, margin = margin) . args <- args[names(x = formals(fun = norm.function))] . return(do.call(what = nor
最新发布
03-26
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值