设计思路:
用随机数产生N个随机数放入一个数组里面,找到所有的子数组,并求和取最大的那个数组输出。
(从数组中第一个元素a[0]开始,依次计算a[0]、a[0]+a[1]、a[0]+a[1]+...+a[i]的值,即从a[0]开始的每个子数组的和,取出最大值。再从数组第二个元素a[1]开始,依次往后计算每个子数组的和,取出最大值。依次循环,直到数组最后一个元素,取出a[i]。)
代码:
package shuzu01; import java.util.*; public class Sum { public static void main(String[] args) { Scanner input=new Scanner(System.in); System.out.print("请输入数组中数的个数:"); int num=input.nextInt(); int array[]=new int[num]; for(int i=0;i<num;i++) { if((int)(Math.random()*2)==0) { array[i]=(int)(Math.random()*10); } else { array[i]=-(int)(Math.random()*10); } } for(int i=0;i<num;i++) { System.out.println(array[i]); } int max=0; int list[]=new int[num]; for(int j=0;j<num;j++) { max=array[j]; int sum=0; for(int t=j;t<num;t++) { sum=sum+array[t]; if(sum>max) { max=sum; } } list[j]=max; } /* for(int i=0;i<num;i++) { System.out.print("第"+(i+1)+"次比较的子数组的和的最大值为:"); System.out.println(list[i]); }*/ for(int i=1;i<num;i++) { max=list[0]; if(list[i]>max) { max=list[i]; } } System.out.print("子数组和的最大值为:"+max); } }
总结:求和取最大值用到了循环嵌套,时间复杂度要求没有达到