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

要求:
   输入一个一维整形数组,数组里有正数也有负数。
   一维数组首尾相接,象个一条首尾相接带子一样。
   数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。                         求所有子数组的和的最大值。

设计思想:

  1 设传参的数组长为n,创建长度为2n的辅助数组,按顺序赋两遍值

  2 每一个以 i 开头的子数组有 n 个,也就是从 第 i 个到 n+i (i<=n)

  3 将得到的子数组求和并存起来,判断和数组中的最大值即可。

源代码:

import java.util.Vector;

public class MaxListNumber {
 public static int maxList(int []num) {
  int max=-99;
  int len=num.length;
  if(len<=0) {
   System.out.println("数组为空。");
  }
  else {
  Vector<Integer> numx=new Vector<>();
  int[]number=new int[2*len];
  for(int i=0;i<len;i++) {
   
   number[i]=num[i];
   System.out.println("数组元素:"+num[i]);
   number[len+i]=num[i];
  }
  for(int i=0;i<len;i++) {
   int temp;
   int sum=0;
   int count=0;
   for(int k=i;k<number.length;k++) {
    if(count>=len)
     break;
    temp=number[k];
    sum=sum+temp;
    numx.add(sum);
    count++;
   }
  }
  max=numx.get(0);
  for(int i=0;i<numx.size();i++) {
   if(max<numx.get(i)) {
    max=numx.get(i);
   }
  }
  }
  return max;
 }
 public static int maxList(int [][]num) {
  int max=num[0][0];
  for(int i=0;i<5;i++) {
   
  }
  return 0;
  
 }
 public static void main(String args[]) {

  int []number=new int[6];
  for(int i=0;i<6;i++) {
   number[i]=(int) (Math.random()*10-5);
  }
  int max=maxList(number);
  System.out.println("最大子数组的和:"+max);
 }
}

结果截图

  

总结:

  以消耗空间来提高时间效率(降低时间复杂度)

原文地址:https://www.cnblogs.com/liushiqiang123/p/8349786.html