笔试面试算法经典--动态规划-最大子矩阵和(Java)
来源:互联网 发布:激战2诺恩捏脸数据 编辑:程序博客网 时间:2024/06/02 04:15
【题目】
给定一个矩阵 matrix,其中矩阵中的元素可以包含正数、负数、和0,返回子矩阵的最大累加和。例如,矩阵 matrix 为:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2
拥有最大和的子矩阵为:
9 2
-4 1
-1 8
其和为15。
解法:只需要遍历所有的行数组,将遍历的所有行数组相加,然后 产生一个新的数组,只要利用求子数组的最大和就可以求出所有行中子矩阵的最大值。
package Matrix;public class MaxSumofMatrix { public static void main(String[] args) { //最大子矩阵的累加和 int matrix[][]={{-1,-1,-1},{-1,2,2},{-81,-7,-1}}; maxSum(matrix); } public static void maxSum(int matrix[][]) { if(matrix==null||matrix.length==0) return; int max=0; int col=matrix[0].length,row=matrix.length; for(int i=0;i<row;i++) { int arr[]=new int[col]; for(int j=i;j<row;j++) { //遍历所有的子行 for(int k=0;k<col;k++) { arr[k]+=matrix[j][k]; //将每子行的值进行相加然后利用子数组的最大和就可以求出子矩阵的最大和 } max=Math.max(maxSum(arr), max); //求出数组的子数组和最大值 } } System.out.println(max); } public static int maxSum(int arr[]) { int max=0,sum=0; for(int i=0;i<arr.length;i++) { if(sum<=0) { sum=arr[i]; } else { sum+=arr[i]; } max=Math.max(sum, max); } return max; }}
0 0
- 笔试面试算法经典--动态规划-最大子矩阵和(Java)
- 笔试面试算法经典--连续子数组的最大乘积及连续子数组的最大和(Java)
- 笔试面试之 最大和子矩阵
- 算法题2 动态规划之最大子序列和&最大子矩阵和
- 动态规划算法 (微软笔试题,求连续子数组的最大和)
- 动态规划 最大子矩阵的和
- 动态规划-最大子矩阵和
- poj1050(动态规划+最大子矩阵和)
- 动态规划---最大子段和&最大子矩阵和
- 最大子序列和+最大子矩阵-动态规划-无
- 最大子矩阵(动态规划)
- 动态规划 02 (最大子矩阵)
- 最大子矩阵(动态规划)
- 【BZOJ1084】最大子矩阵(动态规划)
- 动态规划4:最大子段和问题到最大子矩阵问题(四):最大子矩阵面积问题
- 动态规划 最大子矩阵
- 【动态规划】最大子矩阵
- 动态规划-最大子矩阵
- Android四大组件之Service
- HDU 2062 Bone Collector (01背包)
- Java_多态和内部类
- jQuery源码初探(2)
- 宏和函数
- 笔试面试算法经典--动态规划-最大子矩阵和(Java)
- c++调用dll动态链接库历程
- C++中进制转变
- ubuntu 16.04上radvd起不来
- viewpager的fragment中使用context报错的解决办法
- 求第一个只出现一次的字符
- MyBatis--动态SQL---foreach标签--数组
- 牛顿法
- JAVA规则引擎 -- Drools