返回一个整数数组中最大子数组的和。(续2)---二维数组

求二维数组的最大子数组的和

思路:通过降维进行运算,每一行每次进行相同程度的加法运算,然后存到一个数组中就成了一维数组的求最大子数组的和,例如上图先进行[A][3]~[A][5]的求最大子数组的和,然后进行A列和B列相加再求最大子数组的和,如此循环到A+B+......+F,然后再从

B列开始进项如上操作,每一次求出最大子数组的和之后都会和最大值进行比较,然后选出最大值,输出结果。时间复杂度为O(n^4).....想不出来降低时间复杂度的方法。。。

代码如下

import java.util.Scanner;

public class Shuzu{

    public static void main(String[] args) {
        Scanner sc =new Scanner(System.in);
        System.out.println("请输入一个二维数组");
        int[][] num = new int[5][5];
        int[] num1=new int[5];

        int sum=0;
        int sum1=0;
        int m,n;

        for(int i=0;i<5;i++) {
            for(int j=0;j<5;j++) {
                num[i][j]=sc.nextInt();
            }
        }

        for(int j=0;j<5;j++) {

            for(int a=j;a<5;a++) {
                for(int i=0;i<5;i++) {
                    num1[i]=0;
                    for(int b=0;b<=j;b++) {
                        num1[i]=num[i][b]+num1[i];
                    }
                    for(int q=0;q<5;q++) {
                        sum1=num1[q];
                        for(int p=q+1;p<5;p++) {
                            sum1=sum1+num1[p];
                            if(sum1>sum) {
                                sum=sum1;
                            }
                        }
                    }
                }
            }
        }

        System.out.println("最大子数组的和为:"+sum);

    }

}

运行结果:

原文地址:https://www.cnblogs.com/quyangzhangsiyuan/p/10588917.html

时间: 2024-07-28 20:51:16

返回一个整数数组中最大子数组的和。(续2)---二维数组的相关文章

echarts中key-value形式的dataset source值转换为二维数组形式的dataset source值

在echarts的数据来源选型时,我在二维数组.对象数组两种形式中出现优于,看上去对象数组语义化挺好,但二维数组可以直接在echarts的各种例子里直接用,为了兼顾两个的长处,写了对象数组与二维数组的转换方法,代码如下(最外层花括号用于方便直接才控制台输出而不污染控制台环境): { // 原始key-value形式的objArr let objArr=[ {product: 'Matcha Latte', count: 823, score: 95.8}, {product: 'Milk Tea

数组的应用:冒泡排序,折半查找及二维数组的应用

人类思维--计算机逻辑思维 逻辑思维--代码实现 写书法: 描红——临摹——碑贴——自成一体——草 复习: 数组:一维,二维,多维 一维:豆角.连续,同一类型. 定义:数据类型[] 数组名=new 数据类型[长度]{.,.,.,.}; 赋值:数组名[下标] = 值 取值:数组名[下标] 灵活运用:与for循环的结合应用. 1.求最大值,最小值. 2.求总和,平均. 3.随机(生成下标)抽值. 数组的应用: (一).冒泡排序. 1.冒泡排序是用双层循环解决.外层循环的是趟数,里层循环的是次数. 2

周泊辰和陈岩的返回一个整数组中的最大子数组的和

#include<iostream>using namespace std;int max(int a,int b){ if(a>b) {return a;}else{ return b;}}int maxsum(int a[],int n){ int i;int maxsofar=0;int maxendinghere=0;for (i=0;i<n;i++){maxendinghere=max(maxendinghere+a[i],0);maxsofar=max(maxsofar

返回一个整数组中的最大子数组的和

#include<stdio.h>#include<stdlib.h>#include<time.h> int main(){    int i,d;    int max=0;    int b=0;    int c [1200];    srand(time(NULL));    for(i=0;i<1200;i++)    {        d=rand()%2;        if(d==0)        {            c[i]=rand(

返回一个整数组的最大子数组和

#include<iostream>using namespace std;int max(int a,int b){ if(a>b) {return a;}else{ return b;}}int maxsum(int a[],int n){ int i;int maxsofar=0;int maxendinghere=0;for (i=0;i<n;i++){maxendinghere=max(maxendinghere+a[i],0);maxsofar=max(maxsofar

返回一个整数组中的最大的子数组的和

#include<stdio.h>#include<stdlib.h>#include<time.h> int main(){    int i,d;    int max=0;    int b=0;    int c [1200];    srand(time(NULL));    for(i=0;i<1200;i++)    {        d=rand()%2;        if(d==0)        {            c[i]=rand(

二维数组中的查找,杨氏矩阵

题目: 在一个二维数组中,每行都按照从左到右的递增的顺序排序.每列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个数组和一个数,判断数组中是否包含这个数. 例如: 二维数组 1 2 3 4 5 6 7 8 9 查找数字7. 题目分析: 算法一: 杨氏矩阵中的查找,可以看做是在二维数组中查找,定义一个二维数组,根据数组的基本特点,可以从数组中第一个元素逐行进行遍历,若数组的某个元素与所要找的数字相等,则能够找到这个数字.如果遍历完整个数组,都没有与之相等的元素,则找不到这个数字. 下面

C语言数组:C语言数组定义、二维数组、动态数组、字符串数组

1.C语言数组的概念 在<更加优美的C语言输出>一节中我们举了一个例子,是输出一个 4×4 的整数矩阵,代码如下: #include <stdio.h> #include <stdlib.h> int main() { int a1=20, a2=345, a3=700, a4=22; int b1=56720, b2=9999, b3=20098, b4=2; int c1=233, c2=205, c3=1, c4=6666; int d1=34, d2=0, d3

计算机二级-C语言-对标志位的巧妙使用。对二维数组数据进行处理。对文件进行数据输入。

//函数fun的功能是:计算形参x所指数组中平均值(规定所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于的移至后部,平均值作为返回值,在主函数中输出平均值和后移的数据. //重难点:对数组的处理. 1 #include <stdlib.h> 2 #include <stdio.h> 3 #define N 10 4 double fun(double *x) 5 { int i, j; double s, av, y[N]; 6 s=0; 7 for(i=0;

返回一个整数数组中最大子数组的和4

题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二维数组首尾相接,象个一条首尾相接带子一样. 3 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 4 求所有子数组的和的最大值.要求时间复杂度为O(n). 设计思想 目前的解决方案是最笨的方法,穷举,所以时间复杂度达不到题目的要求,还需要进一步的寻找答案 源代码 题目:返回一个二维整数数组中最大子数组的和. 要求: 1 输入一个二维整形数组,数组里有正数也有负数. 2 二