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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

[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;
	}
}

0 个回复

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