[Java] 纯文本查看 复制代码
public static void main(String[] args) {
// int array[] = { 233333, -3222, 5, -222227, 11, -224, 66, -23, 45,-66, 123 };
Integer array[] = getRandom();
printArray(array);
//定义变量比较子串大小
int temp = Integer.MIN_VALUE;
//子串开始位置
int start = 0;
//子串结束位置(包含)
int end = 0;
//从0角标开始计算所有子串的和值
for (int i = 0; i < array.length; i++) {
for (int j = i; j < array.length; j++) {
int sum = 0;
//计算从i角标开始,各个子串的总和
for (int x = i; x <= j; x++) {
sum += array[x];
}
//保存子串开始结尾
if (sum > temp) {
temp = sum;
start = i;
end = j;
}
}
}
System.out.println("开始角标:"+start + " 结束角标:" + end);
//取出子串并打印
Integer array_2[] = get(array, start, end);
System.out.print("最大和子串");
printArray(array_2);
}
//取子串 包含开头包含结尾
private static Integer[] get(Integer[] array, int start, int end) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = start; i <= end; i++) {
list.add(array);
}
Integer in[] = new Integer[list.size()];
return list.toArray(in);
}
//生成随机数组
public static Integer[] getRandom() {
Random r = new Random();
ArrayList<Integer> list = new ArrayList<>();
for (int i = 0; i < r.nextInt(20) + 5; i++) {
if (i % 2 == 0) {
list.add(r.nextInt(200));
} else
list.add(-r.nextInt(200));
}
Integer[] in = new Integer[list.size()];
return list.toArray(in);
}
//打印数组
public static void printArray(Integer arr[]) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i != arr.length - 1) {
System.out.print(arr + ",");
} else
System.out.println(arr + "]");
}
}