[Java] 纯文本查看 复制代码 package day11;
import java.util.ArrayList;
import java.util.Random;
/*
* 有一个数字串array,包含100个正数和负数[-100到100](包括正负100)随机分布,要找到他的一个子串array[i...j](0<=i<=j<100),
* 使得在array的所有子串中,array[i...j]的和最大。比如:串{1,-3,5,-2,6}的最大子串为{5,-2,6}。
* */
public class Demo01 {
public static void main(String[] args) {
Random r=new Random();
int [] arr=new int[100];
//获取-100到100之间的随机数,并添加到数组arr中
for (int i = 0; i < arr.length; i++) {
int num=r.nextInt(201)-100;
arr[i]=num;
}
//遍历数组arr
printArr(arr);
int[] brr=selectArr(arr);
printArr(brr);
}
public static void printArr(int[] arr) {
// TODO Auto-generated method stub
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i]+" ");
}
System.out.println();
}
public static int[] selectArr(int[] arr){
ArrayList<Integer> list=new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
for (int k = 0; k < arr.length-i; k++) {
int sum=0;
for (int k2 = k; k2 <=k+i; k2++) {
sum+=arr[k2];
}
list.add(sum);
System.out.print(sum+" ");
}
System.out.println("连续"+(i+1)+"个数的和");
}
System.out.println("----------------");
int big=0;
for (int i = 0; i < list.size(); i++) {
if(big<list.get(i)){
big=list.get(i);
}
}
System.out.println("连续 几个数的最大和"+big);
int x=0,y=0;
//找到始终角标
for (int i = 0; i < arr.length; i++) {
for (int k = 0; k < arr.length-i; k++) {
int sum=0;
for (int k2 = k; k2 <=k+i; k2++) {
sum+=arr[k2];
}
if(big==sum){
x=k;y=k+i;
System.out.println("最小角標"+x);
System.out.println("最大角標"+y);
}
}
}
int [] crr=new int[y-x+1];
for (int i = 0 ; i < crr.length; i++) {
crr[i]=arr[x];
x++;
}
return crr;
}
}
|