设计思路: 一个含有n个数值的一维环数组。可以把他分为n个一维数组,分别求出这n个以为数组的最大值。然后他这些值放在另一个一维数组中。再比较,求出最大子数组。
代码:
package 整数环数组最大子数组的和; import java.util.Random; import java.util.Scanner; public class one { public static void main(String[] args) { // TODO 自动生成的方法存根 System.out.print("请输入数组的长度:"); Scanner sr=new Scanner(System.in); int num=sr.nextInt(); int [] sz =new int[num]; long [] max =new long[num]; Random a=new Random (num); System.out.println("随机产生的数组为:"); for (int i=0;i<num;i++) { sz[i]=a.nextInt(200)-100; System.out.print(sz[i]+" "); } System.out.println(); long maxsum=0; long left=0; for(int j=1;j<=num;j++) { maxsum=sz[j-1]; left=sz[j-1]; for(int l=j;l<num+j-1;l++) { if(left<0) { left=sz[l%num]; } else{ left+=sz[l%num]; } System.out.println("left maxsum "+left+" "+maxsum); maxsum=getmax(left,maxsum); } max[j-1]=maxsum; System.out.println(max[j-1]); } for(int n=0;n<num;n++){ maxsum=getmax(max[n],maxsum); } System.out.println("最大子数组的值为:"+maxsum); } private static long getmax(long a, long b) { // TODO 自动生成的方法存根 return a>b? a:b; } }实验截图:
反思: 在设计程序中。用了两个for循环,显得有些冗杂。 将大问题分解成能解决的小问题,是编程的一个重要思路。 在编程中,一定要注意数组的长度是否与你期望的所一致,避免不必要的调试。
时间: 2024-10-05 21:55:01