- package javA算法题;
- import java.io.BufferedReader;
- import java.io.IOException;
- import java.io.InputStreamReader;
- /**
- * 有一个数字串array,包含100个正数和负数随机分布,要找到他的一个子串array[i...j]
- * (0<=i<=j<=100),使得在array的所有子串中,array[i...j]的和最大。比如:串{1,-3,5,-2,6}的最大子串为{5,-2,6}
- * @author Administrator
- *
- */
- public class 黑马_计算最大子串 {
- //计算i-j子串中的最大值
- public static int[] sumIJ(int[] arr , int i , int j ){
- int[] result = new int[3];
- result[1] = i;
- result[2] = j;
- for(int k = i ; k <= j ; k++)
- result[0] += arr[k];
- return result;
- }
-
- //计算最大子串
- public static String maxIJ( String str){
- StringBuffer sb = new StringBuffer();//返回计算出的最大子串的格式
- int result[] = new int[3];
- String[] strr = str.split(",");
- int[] intrr = new int[strr.length];
-
- for(int i = 0 ; i < strr.length ; i++)
- intrr[i] = Integer.parseInt(strr[i]);
-
- for(int i = 0 ; i < intrr.length ; i++)
- for(int j = i; j< intrr.length ; j++)
- if(sumIJ(intrr , i ,j)[0]>result[0])
- result = sumIJ(intrr , i ,j);
- for(int i = result[1] ; i <= result[2] ; i ++ ){
- sb.append(intrr[i]);
- if(i !=result[2])
- sb.append(",");
- }
- return sb.toString();
- }
-
- public static void main(String [] args) throws Exception{
- BufferedReader bw = new BufferedReader(new InputStreamReader(System.in));
-
- String str;
- while((str = bw.readLine())!=null){
- if("over".equals(str.trim()))
- break;
- System.out.println("最大子串为:"+maxIJ(str));
- }
- }
- }
复制代码 1,2,3,-6,3,-9,14,10,-6
最大子串为:14,10
|