整数组中取最大子数组

寻找最大子数组

1.设计思路;首先数组首尾连接问题 ,只需要将两个相同数组拼接即可。

寻找最大子数组流程:定义变量 max  shou  wei   从数组下标0开始循环,最初遇到整数小于0,舍去,找第一个大于零的数字。

第一个正整数存储   于shou   从下一个开始循环,求和。

当和小于0,舍去。      循环一遍 求得和值最大值的下标。

程序:

 public class Max {
  public static void main(String args[]){
      int a[]={-5,-5,7,0,5,-4,-8,-9};
      int aa[]={1,-5,7,-3,-4,4,8,-9,1,5,7,-3,-4,4,8,-9};

      am(a);
  }

  static int [] am(int []aa){
      int shou=0; int wei=0;
      int shou2=0;int wei2=shou2;
      int max=0;int max2;
      for(int j=0;j<aa.length-1;j++){
          while(aa[shou2]<0){
              shou2++;
              wei2++;j++;
              max=aa[shou2];
              if(aa[shou2]>aa.length-1){break;}
              continue;
           }
          if(max+aa[wei2]<0){

              shou2=wei2+1;
              wei2=wei2+2;j++;
              max=aa[shou2];

              continue;
          }

          else {
              max=aa[wei2]+max;
              if(aa[wei2]+max>max){
                 shou=shou2;wei=wei2;
              }
              wei2++;

          }
      }
      if (max <= 0) {
            for (int i = 0; i < aa.length; i++) {
                if (i == 0) {
                    max = aa[i];
                }
                if (aa[i] > max) {
                    max = aa[i];
                }
            }
        }

      System.out.println("第一次答案 下标开始"+shou+"下标结尾"+wei);
      if(wei>aa.length/2){wei=wei-aa.length/2;
      System.out.println("下标开始"+shou+"  下标结尾第二圈"+wei);}
      else{System.out.println("下标开始"+shou+"下标结尾"+wei);}
      return aa;
  }
}

运行结果 截图;

时间: 2024-10-10 20:39:39

整数组中取最大子数组的相关文章

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

#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(

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

题目:返回一个二维整数组中最大子数组的和 实验思路 根据老师上课给出的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)中的元素:"

软件工程结对开发之求一个数组中连续最大子数组之和

一.团队成员: 檀威,陈志利 二.项目名: 求一个数组中连续最大子数组之和 三.我们的设计思路: 设sum[i]为以第i个元素结尾且和最大的连续子数组.对于元素i,所有以它前面的元素结尾的子数组的长度都已经求得,那么以第i个元素结尾且它们之和最大的连续子数组要么是以第i-1个元素结尾且它们之和最大的连续子数组加上这个元素,要么是只包含第i个元素,即sum[i] = max(sum[i-1] + arr[i], arr[i]).可以通过判断sum[i-1] + arr[i]是否大于arr[i]来做

课堂练习求环整数组中最大子数组之和

设计思路:之前还有一个课堂练习,是用户输入一个整数组,求其中最大子数组之和,我借鉴的其他同学的代码,仅在此基础上修改的.运用try,catch使得用户不必在输入数组之前输入数组的长度,但是需要一个除整数以外的数来结尾.一共使用了3个循环,运用一个循环得出每个数组中最大子数组之和的最大值,一个是用来计算最大子数组之和,最后一个用来实现数组的前移.第一个循环中包着另外两个循环.总的来说,是在之前课堂练习的基础上增加了将一个数组中的每个数做一次最前面的数,从中求出最大值. 程序代码: 1 import

返回一个二维整数数组中的最大子数组之和(环)

要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值. 思路: 根据前几次所做的关于一维及二维数组的思路,将其整合. 把二维数组转换成一维数组,再用求一维数组最大子数组和(环)的方式求解 1 #include<iostream> 2 #include<cstdio> 3 #include<ctime> 4 using namespac

3、软件工程结对开发之求一维数组中连续最大子数组之和并判断溢出

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在我们的前一个程序中,由于int类型rand()随机产生数范围是0~32767,所以产生的1000个数较小,不会产生溢出.但我们通过查资料得知int32最大数是2147

软件工程结对开发之求一维数组中连续最大子数组之和2

一.题目要求 题目:返回一个整数数组中最大子数组的和. 要求: 要求程序必须能处理1000 个元素: 每个元素是int32 类型的: 输入一个整形数组,数组里有正数也有负数: 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和: 求所有子数组的和的最大值.要求时间复杂度为O(n): 结果溢出之后能判断. 二.设计思想 在求最大连续子数组时同样用动态法,对于新增的要求,可以增大随机产生数的倍数,如果结果溢出则输出溢出提示字样,其中int类型rand()随机产生数范围是0~32767,i

软件工程结对开发之求二维数组中连续最大子数组之和2

一.题目要求 题目:返回一个二维整数数组中最大子数组的和. 要求: 输入一个二维整形数组,数组里有正数也有负数. 二维数组首尾相接,象个一条首尾相接带子一样. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为O(n). 二.设计思路 先调用以前求二维最大连续子数组之和的maxSubArray函数求一个首尾不相邻的二维最大连续子数组之和,接着用将第k列各元素左移一列可以再求一个最大连续子数组之和 ,循环m次(因为原二维数组有m列)求得每个