A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kangnam 中级黑马   /  2016-9-12 22:49  /  215 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*(没写若全负数的情况)
* 题目:有一个数字串array,包含100个正数和负数随机分布,
* 要找到他的一个子串array[i...j](0<=i<=j<=100),
* 使得在array的所有子串中,array[i...j]的和最大。
* 比如:串{1,-3,5,-2,6}的最大子串为{5,-2,6}。
* */
public class Maxmum {
        public static void main(String[] args) {
                int[] arr=new int[100];
                int b = 0,sum=0,k=0;
                int start = 0,end = 0;
                //产生(-100,100)的整数
                for(int i=0;i<5;i++){
                        arr[i] =((Math.random() > 0.5 ? -1 : 1) * (int) (Math.random() * 100));
                         if (i % 10 == 0) {
                 System.out.println();
         }
         System.out.print(arr[i] + " ");
                }
                //遍历数组,求最大值
                for (int i=0; i<arr.length; i++) {
                                 b=b+arr[i];
                                 if(b>sum){
                                         sum=b;
                                         start=k;
                                         end=i;
                                }
                                if(b<0)
                                        {   
                                                b=0;
                                                k=i+1;
                                        }
                        }       
                System.out.println();
                System.out.println("最大子串和:"+sum);
                System.out.println("下标从"+start+"开始"+" "+"从"+end+"结束");
                System.out.print("最大子串:");
                for(int i=start;i<=end;i++){
                        System.out.print(arr[i]+" ");
                }
        }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马