返回一个整数数组中最大子数组的和——首尾相接
设计思路:
数组首尾相接的问题:初定一个四个值的数组:1 -1 3 9,通过首尾相接实际上求的数组就变为了一个加长版的数组:1 -1 3 9 1 -1 3 9
先用一个数组存储输入的数组的值,再用一个数组存储相加后的子数组和原先子数组的大的值,maxsum表示最大子数组的值,通过赋值,使数组从首位开始一次将值接到数组的尾巴处,进行到将原数组所有值都依次接到原数组尾巴处时停止,输出最大字数组值
代码:
package zuoye_03; import java.util.Scanner; public class shuzu3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int a[] = new int[100]; int sz[] = new int[100]; int i,j,szgs1, maxsum; System.out.println("请输入数组元素个数:"); int szgs = sc.nextInt(); System.out.println("请输入数组元素:"); for (i = 0; i < szgs; i++) { sz[i] = sc.nextInt(); } a[0] = maxsum = sz[0]; szgs1 = szgs; if (szgs>0) { for (j = 0; j < szgs; j++) { for (i = j + 1; i < szgs1; i++) { a[i] = max(a[i - 1] + sz[i], sz[i]); maxsum = max(maxsum, a[i]); } sz[szgs1] = sz[szgs1-szgs]; a[j+1] = sz[szgs1-szgs+1]; szgs1 =szgs1+ 1; } } System.out.println("最大子数组的和为:"+ maxsum ); } private static int max(int i, int j) { // TODO 自动生成的方法存根 if(i>=j) return i; else return j; } }
感受:
拿到一个问题一定要分解成一个个小的问题,多多分解,一个大又麻烦的问题就成了一个个小的问题,再去解决的时候就会简单很多。