思路就是很简单的
遍历以每个数字开头时的所有子集合,然后比较,记下最大值
时间复杂度为O(n^2)
1 package hmk0; 2 3 import java.util.ArrayList; 4 import java.util.Scanner; 5 6 class TClass { 7 public int value; 8 9 public TClass() { 10 value = 0; 11 } 12 13 public TClass(int i) { 14 value = i; 15 } 16 } 17 18 class Tmp { 19 public static int func(ArrayList<TClass> ipt, int length) { 20 int i = 0; 21 int j = 0; 22 int tmp = 0; 23 int rtn = ipt.get(0).value;// 初始化防止全负 24 boolean flag = true;// 标记环状回到开头 25 for (i = 0; i < length; i++) { 26 tmp = 0; 27 flag = true; 28 for (j = i; j < i || flag; j++) { 29 if (j == length) { 30 if (i == 0) 31 break; 32 j = 0; 33 flag = false; 34 } 35 tmp = tmp + ipt.get(j).value; 36 if (tmp > rtn) { 37 rtn = tmp; 38 } 39 } 40 } 41 return rtn; 42 } 43 44 public static void main(String args[]) { 45 int l = 0; 46 int i = 0; 47 int tmp = 0; 48 ArrayList<TClass> ipt = new ArrayList<TClass>(); 49 Scanner sipt = new Scanner(System.in); 50 System.out.println("Enter The Length"); 51 l = sipt.nextInt(); 52 if (sipt.hasNextLine()) { 53 sipt.nextLine(); 54 } 55 for (i = 0; i < l; i++) { 56 tmp = sipt.nextInt(); 57 if (sipt.hasNextLine()) { 58 sipt.nextLine(); 59 } 60 ipt.add(new TClass(tmp)); 61 } 62 System.out.println("Output:" + func(ipt, l)); 63 } 64 }