黑马程序员技术交流社区

标题: 找到一组int[]连续几个数的最大和对应的数组串 [打印本页]

作者: &天马星空ぁ    时间: 2016-9-19 22:52
标题: 找到一组int[]连续几个数的最大和对应的数组串
[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=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+"  ");
                }
                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=arr[x];
                        x++;
                }
                return crr;
        }
}






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2