求最大累加矩阵大小

public static int maxMatrixSum(int[][] array) {
int max = 0;
int[] sumArray = null;
int sumArrayLength = array[0].length;
//前两个for作用 第一行到第五行 第二行到第五行 。。。。。 从上到下累加成一维数组
for (int i = 0; i < array.length; i++) {
sumArray = new int[sumArrayLength];
for (int j = i; j < array.length; j++) {
int cur = 0;
//开始变成子数组中最大累加和问题 每一个这个问题需要一个全新的cur
for (int k = 0; k < sumArrayLength; k++) {
cur = cur < 0 ? 0 : cur;
sumArray[k] += array[j][k];
cur += sumArray[k];
max = Math.max(cur, max);
}
}
}
return max;
}

public static void main(String[] args) {
int[][] a = new int[3][5];
for(int i = 0;i < a.length;i ++){
a[i][0] = 3;
a[i][1] = -4;
a[i][2] = 7;
a[i][3] = -4;
a[i][4] = 2;
}
for(int i = 0;i< a.length;i++){
for (int j = 0;j < a[0].length;j ++){
System.out.print(a[i][j] + " ");
}
System.out.println();
}
System.out.println(maxMatrixSum(a));
}

时间: 2024-11-01 18:05:16

求最大累加矩阵大小的相关文章

数据结构--单调栈--求最大子矩阵的大小

求最大子矩阵的大小给定一个整型矩阵map, 其中的值只有0和1两种, 求其中全是1的所有矩形区域中, 最大的矩形区域为1的数量.例如:1 1 1 0其中, 最大的矩形区域有3个1, 所以返回3.再如:1 0 1 11 1 1 11 1 1 0其中, 最大的矩形区域有6个1, 所以返回6. 解:将其放到一个矩阵中,同时从第0行开始计算,以该行打底时,直方图的最大面积 如第0行,数组为[1, 0, 1, 1] 此时按照下面的求直方图最大面积. 然后以第1行打底,此时数组为[2, 1, 2, 2],同

栈和队列----求最大子矩阵的大小

求最大子矩阵的大小 给定一个整型矩阵map,其中的值只有0,1两种,求全是1 的所有矩阵区域中,最大的矩形区域为1的数量. 例如: 1  1  1  0,其中最大的矩形区域有3个1,所以返回3 例如: 1  0  1  1 1  1  1  1 1  1  1  0 其中,最大的矩形区域有6个1,所以返回6 [解析] 首先,矩阵的行数为N,以每一行作为分割,统计以当前行作为底的情况下,每个位置往上的1 的数量,使用高度数组 height 来表示. 其次,对于每一次分割,都利用更新后的height

matlab中如何求某一个矩阵的标准差和均值

方法: 先reshape成行向量或者列向量 然后,利用mean函数,std函数. 构造测试数据,可以利用random函数,就好.利用这个函数,可以构造不同分布的随机数列(或 矩阵). 如: >> y =random('norm',2,0.3,3,4) y = 2.1391 2.2945 2.0769 2.1751 1.9334 1.6805 1.9315 1.8912 1.8775 1.8126 1.9733 1.7686 >> rows = reshape(y,3*4,1) ro

c编程:求出4&#215;4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和。

//求出4×4矩阵中最大和最小元素值及其所在行下标和列下标,求出两条主对角线元素之和 #include <stdio.h> int main() { int sum=0; int max,min; int max1,max2;//记录最大值的坐标 int min1,min2;//记录最小值的坐标 int i,j; int a[4][4]; //为数组赋值 for(i=0;i<4;i++) { for(j=0;j<4;j++) { scanf("%d",&

不使用sizeof求一个变量的大小

之前在腾讯实习生笔试的时候,遇到一个问题,当时一点思路也没有,现在想了想,找了一些资料,大体上明白了应该如何去做. 问题是: 使用C实现求一个变量的大小,不使用sizeof. 首先我先把我的代码贴上: #define size(x) ((char*)(&x+1)-(char*)(&x)) 该宏定义就实现了刚刚的需求. 首先,我们知道,char是占用一个字节的大小,我们得到一个变量之后,先取其引用,即&x,则该引用指向变量x的首地址. 而&x+1,是跨越该x之后的第一个地址.

MATLAB 求两个矩阵的 欧氏距离

MATLAB 求两个矩阵的 欧氏距离 : 如果定义两个矩阵分别为a,b则定义c=(a-b).^2所求距离d=sqrt(sum(c(:))) 原文地址:https://www.cnblogs.com/shenxiaolin/p/9940284.html

机器学习中的矩阵向量求导(三) 矩阵向量求导之微分法

在机器学习中的矩阵向量求导(二) 矩阵向量求导之定义法中,我们讨论了定义法求解矩阵向量求导的方法,但是这个方法对于比较复杂的求导式子,中间运算会很复杂,同时排列求导出的结果也很麻烦.因此我们需要其他的一些求导方法.本文我们讨论使用微分法来求解标量对向量的求导,以及标量对矩阵的求导. 本文的标量对向量的求导,以及标量对矩阵的求导使用分母布局.如果遇到其他资料求导结果不同,请先确认布局是否一样. 1. 矩阵微分 在高数里面我们学习过标量的导数和微分,他们之间有这样的关系:$df =f'(x)dx$.

c语言练习38——求3*3矩阵对角线之和

#include<stdio.h> /*题目:求3*3矩阵对角线之和*/ int main(){ int i,j,k,t; int a[3][3]; while(1){ printf("请依次输入矩阵数字\n"); k=0; for(i=0;i<3;i++) for(j=0;j<3;j++) scanf("%d",&a[i][j]); for(i=0;i<3;i++) for(j=0;j<3;j++) if(i==j) k

UVA11149 Power of Matrix(快速幂求等比矩阵和)

题面 \(solution:\) 首先这一题是\(UVA11149\)的题目,建议到\(vjudge\)上去测,没办法\(UVA\)太难注册了.然后其原题与本题不是完全一样的,毒瘤卡输出!但思想一模一样! 首先,如果题目只要我们求\(A^K\) 那这一题我们可以直接模版矩乘快速幂来做,但是它现在让我们求$\sum_{i=1}^{k}{(A^i)} $ 所以我们思考一下这两者是否有什么关系.仔细一想,不难发现几个东西: 一次矩阵乘法复杂度为\(O(n^3)\),所以我们不能进行太多次矩阵乘法 快速