要求:
输入一个一维整形数组,数组里有正数也有负数。
一维数组首尾相接,象个一条首尾相接带子一样。
数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。
设计思想:
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);
}
}
结果截图
总结:
以消耗空间来提高时间效率(降低时间复杂度)