数组与矩阵---子矩阵的最大累加和问题
来源:互联网 发布:淘宝上的yizi是正品吗 编辑:程序博客网 时间:2024/06/05 20:17
【题目】
给定一个矩阵matrix,其中的值有正、有负、有0,返回子矩阵的最大累加和。
例如,matrix为:
-1 -1 -1
-1 2 2
-1 -1 -1
其中最大累加和的子矩阵为:
2 2
所以返回4。
【基本思路】
首先看这样一个例子,假设一个2行4列的矩阵如下:
-2 3 -5 7
1 4 -1 -3
如何求必须含有2行元素的子矩阵中的最大累加和?可以把两列的元素相加,然后得到累加数组[-1, 7, -6, 4],接下来求这个累加数组的最大累加和,结果就是7,且这个子矩阵数:
3
4
也就是说,如果一个矩阵一共有k行且限定必须含有k行元素的情况下,我们只要把矩阵的每一列的k个元素累加生成一个累加数组,然后求出这个数组的最大累加和,这个最大累加和就是必须含有k行元素的子矩阵中的最大累加和。
对于整个N*N的矩阵来说,我们需要考虑以第一行开头的一行矩阵、两行矩阵、三行矩阵…N行矩阵;以及以第二行开头的一行矩阵、二行矩阵…N-1行矩阵;……以最后一行开头的一行矩阵。将所有的这些情况中的最大累加和找到即可。一共有O(
【代码实现】
#python3.5def matrixMaxSum(mat): if mat == None or len(mat) == 0 or len(mat[0]) == 0: return maxSum = -sys.maxsize for i in range(len(mat)): #从第i行开始 s = [0 for i in range(len(mat[0]))] for j in range(i, len(mat)): #计算第i行到第j行的累加和 curSum = 0 for k in range(len(mat[0])): #计算一维数组的累加和 s[k] += mat[j][k] curSum += s[k] maxSum = max(maxSum, curSum) curSum = curSum if curSum > 0 else 0 return maxSum
阅读全文
2 0
- 数组与矩阵---子矩阵的最大累加和问题
- 【算法】子数组的最大累加和/子矩阵的最大累加和问题
- 数组与矩阵问题---子数组的最大累加和问题
- 子矩阵的最大累加和问题
- 子矩阵的最大累加和
- python---子矩阵的最大累加和
- 子数组最大累加和+子矩阵的最大和+子数组累加和为给定值的最大子数组长度
- 数组与矩阵---未排序数组中累加和为给定值的最长子数组系列问题
- 数组与矩阵---未排序数组中累加和小于或等于给定值的最长子数组问题
- 子数组的最大累加和问题
- 子数组的最大累加和问题
- 子数组的最大累加和问题
- 子数组的最大累加和问题
- 求累加和小于等于k的最大子矩阵
- 有关子矩阵最大累加和的总结
- 经典算法——子矩阵的最大累加和问题
- 二维数组和最大的子矩阵
- 数组与矩阵---未排序正数数组中累加和为指定值的最长子数组长度
- Centos7 yum使用阿里源
- python
- 解决Redis持久化之大数据服务暂停问题
- Tomcat 详解
- 学习总结1
- 数组与矩阵---子矩阵的最大累加和问题
- 如何激活win10家庭版?这个方法超管用
- SpringCloud: 服务链路追踪(Spring Cloud Sleuth)
- FFmpeg源代码分析:libswscale的sws_getContext()
- ArrayList
- sklearn中高斯混合模型
- unity VRTK拿起物体设置成碰撞物体的子物体
- 曼德布洛特(Mandelbrot)集合
- boost之pool