最大二维子数组求和~

题目:输入一个整形数组,数组里有正数也有负数。组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。要求时间复杂度为O(n)。

分析:

这样就很复杂我们可以选取其中的正数然后判断连续性当我们加上一个正数时,和会增加;当我们加上一个负数时,和会减少。如果当前得到的和是个负数,那么这个和在接下来的累加中应该抛弃并重新清零,不然的话这个负数将会减少接下来的和,用一个变量记录最大的和,最后返回即可。

代码:

public class 二维子数组最大和 {
         public static void main(String args[]){
              int Array[]={-67,0,1,5,-4,9,10,54,-6,-34,78};
              int MAX=Array[0];
              for(int ii=0;ii<10;ii++){
                  int max=Array[0];int sum=Array[0];
                 for(int i=1;i<10;i++){
                     if(sum+Array[i]>=sum){
                         sum=sum+Array[i];
                        if(sum>max){
                         max=sum;}
                      }
                     else if(sum+Array[i]<0){
                       sum=0;
                    }
                     else{
                        sum=sum+Array[i];
                     }
                }
                 int a=Array[0];
                  for(int iii=0;iii<9;iii++){
                      Array[iii]=Array[iii+1];
                  }
                Array[9]=a;
              if(MAX<max){
                     MAX=max;
                 }        }
        System.out.println("和最大的子数组的和为:"+MAX);
         }
     }

结果:

				
时间: 2024-10-06 03:53:03

最大二维子数组求和~的相关文章

环状二维子数组求和

题目:返回一个二维整数数组中最大子数组的和.要求:输入一个二维整形数组,数组里有正数也有负数.二维数组首尾相接,象个一条首尾相接带子一样. n数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和.求所有子数组的和的最大值.要求时间复杂度为O(n). 结对编程要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 发表一篇博客文章讲述两人合作中的过程.体会以及如何解决冲突(附结对开发的工作照). 结对开发过程: 这次的编程开发是基于上次的以为数

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

题目:返回一个二维整数组中最大子数组的和 实验思路 根据老师上课给出的3*6的数据 我们决定设计一个3*6行的二维数组进行计算,依次进行比较 将最大子数组的和返回 代码 1 #include <iostream.h> 2 int main() 3 { 4 int a[3][6];//定义一个3*6的二维数组 5 int max; 6 int s;//求和 7 int count; 8 int b[3][7]; 9 cout<<"请输入二维数组(3*6)中的元素:"

lintcode循环数组之连续子数组求和

v 题目:连续子数组求和 II 给定一个整数循环数组(头尾相接),请找出一个连续的子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的值.如果多个答案,请返回其中任意一个. v 样例 给定 [3, 1, -100, -3, 4], 返回 [4,0]. v 思路 1.如果不是循环数组,求解连续子区间和的思路如下: 首先设一个累加变量和sum和最大值变量maxN,[ld, rd]表示当前正在累加的区间,[lt,rt]表示最大和的区间.从左边开始一直累加,并初始当前区间[ld

软件工程子数组求和2

1.设计思想:首先想到首尾相连和不相连的区别在哪?区别在最后一个数还可以和前面的数组成一个新的数组:然后就是怎样考虑 用数组储存首尾相连的数组,是否需要加入其他限制条件等? 2.出现的问题:首尾相连数组无法同其他数组一样储存到一个数组中. 4.源代码: package 子数组求和2; import java.util.Scanner; public class test { public static void main(String[] args) { // TODO Auto-generat

最大联通子数组求和

设计题目:求一个二维数组的连通的数组中和最大的最大值. 设计思路: 先建立二维数组并遍历二维数组,将所有的正整数进行分块,然后验证是否联通,如果不联通,则判断路径. 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 5

动态创建二维素组

有时候在创建数组之前,不知道具体几行或列(比如说,我们将数据库中的数据取出,知道列数,而行数是不确定的),这是我们需要动态创建数组: 两种方法:1.转化为一维数组申请2.先申请全部行首指针,再按行逐行申请 1.a=(int *)malloc(sizeof(int),(unsigned)m*n);使用的时候就和一般的二维数组一样.举个例子给你:#include "stdlib.h" #include "stdio.h" #include int main() {  i

402. 连续子数组求和

给定一个整数数组,请找出一个连续子数组,使得该子数组的和最大.输出答案时,请分别返回第一个数字和最后一个数字的下标.(如果两个相同的答案,请返回其中任意一个) 样例 给定 [-3, 1, 3, -3, 4], 返回[1,4]. 想清楚这个问题这道题就差不多有解了:"什么时候更新start(第一个数字下标)和end(最后一个数字下标)?" 首先很直接的可以联想到用动态规划来做这个题,用一个vector来存每个位对应的到此位为止的最大子数组和 那么令F[n]表示为到n为止的最大子数组和,可

子数组求和之大数溢出

题目: 返回一个占内存较多的数组的最大子数组. 要求: 两人结对完成编程任务. 一人主要负责程序分析,代码编程. 一人负责代码复审和代码测试计划. 思想: 老师要求主要是解决内存溢出问题,所以我写的只是一种测试,可能和题目不符,但思路应该一样,就是把大数字一分为二,就像计算机中的高八位低八位一样,我假设一个数字最大表示范围为0~100,如果想要表示9856,那么就用98后面的跟上56来表示,然后高位有正负,求最大子数组,将结果放大相应倍数 加上对应的低位数字 程序源代码: #include<io

1、遍历二维数组并求和。

1 2 int arr[][]=new int[][]{{12,8,45},{11,34,23,76}}; 3 4 int sum = 0; 5 6 System.out.println("数组元素是:"); 7 8 for (int c[]:arr) 9 { 10 for (int b:c) 11 { 12 System.out.print(b+" "); 13 14 sum+=b; 15 } 16 System.out.println(); 17 } 18 19