题目:返回一个整数数组中最大子数组的和。
要求: 输入一个一维整形数组,数组里有正数也有负数。 一维数组首尾相接,象个一条首尾相接带子一样。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和。求所有子数组的和的最大值。 发表一篇博客文章讲述设计思想,出现的问题,可能的解决方案(多选)、源代码、结果截图、总结。
1 package demo; 2 3 public class T1 { 4 public static int Max(int[] a) { 5 int []b=new int[10]; 6 int m = 0; 7 int n = 0; 8 int i; 9 int j=0; 10 int t=0; 11 for (i = 0; i < a.length; i ++) { 12 n += a[i]; 13 if (n > m) 14 m = n; 15 else if (n < 0) 16 n = 0; 17 } 18 int k=a[0]; 19 for(i = 0;i < a.length;i ++) { 20 if(k > a[i]) { 21 k = a[i]; 22 j = i; 23 } 24 } 25 t = j; 26 i = 0; 27 while(j < a.length) { 28 b[i] = a[j]; 29 i ++; 30 j ++; 31 } 32 j = 0; 33 while(j < t) { 34 b[i] = a[j]; 35 i ++; 36 j ++; 37 } 38 n = 0; 39 for(i = 0;i < a.length;i ++) { 40 n += b[i]; 41 if(m < n) { 42 m = n; 43 } 44 if(n < 0) { 45 n = 0; 46 } 47 } 48 return m; 49 50 } 51 52 public static void main(String[] args) { 53 int a[] = { 6 , -5 , 1 , 4, 7, 10}; 54 System.out.println("最大子数组的和为"+Max(a)); 55 } 56 } 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72