Java算法之矩阵中子矩阵最大累加和
Posted 笔触狂放
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java算法之矩阵中子矩阵最大累加和相关的知识,希望对你有一定的参考价值。
题目:矩阵中子矩阵最大累加和
答案:
package com.student;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class T4_6 {
private int[][] nums=null;
private void init() {
System.out.println("请输入二维数组的阶数:");
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
scanner.close();
nums=new int[n][n];
for (int i = 0; i < nums.length; i++) {
for (int j = 0; j < nums[i].length; j++) {
nums[i][j]=Math.random()>0.3?new Random().nextInt(10):new Random().nextInt(10)*(-1);
System.out.print(nums[i][j]+"\\t");
}
System.out.println();
}
print();
}
private void print() {
int[] nn=new int[nums.length];
int max=0;
int row=0;
while (row<nums.length) {
for (int i = row; i < nn.length; i++) {
for (int j = 0; j < nn.length; j++) {
nn[j]+=nums[i][j];
}
//把临时的一维数组找出最大累加和
int a=print(nn);
if (a>max) {
max=a;
}
}
//清空临时的一维数组
Arrays.fill(nn, 0);
row++;
}
System.out.println("最大的累加和为:"+max);
}
private int print(int[] x) {
int max=x[0];
int sum=max;
//定义两个变量,保存开始累加的下标,结束累加的下标
int left=0,right=0;
for (int i = 1; i < x.length; i++) {
if (sum>0) {
sum+=x[i];
}else {
sum=x[i];
left=i;
}
if (sum>max) {
max=sum;
right=i;
}
}
return max;
}
public static void main(String[] args) {
new T4_6().init();
}
}
以上是关于Java算法之矩阵中子矩阵最大累加和的主要内容,如果未能解决你的问题,请参考以下文章
[程序员代码面试指南]数组和矩阵问题-数组中子数组的最大累乘积