代码改变世界

课堂练习

2017-03-31 19:16  ovols  阅读(147)  评论(0编辑  收藏  举报

思路:

         求循环数组的最大子数组,相当于将数组重复两遍,然后再求出这个重复两遍的数组求出它的最大子数组即可。这个题目的实质是弄清楚循环数组求最大子数组即是讲所有数组重复一遍然后再用一般的方法求最大子数组。

具体代码:

package example1;

import java.util.Scanner;
public class example1 {
    public static void main(String args[]){
        int num;
        Scanner in = new Scanner(System.in);
        System.out.println("输入数组中元素的个数:");
        num = in.nextInt();
        int []a = new int[num]; //定义数组a
        for(int i = 0;i < num;i ++)
        {
            a[i] = (int)(Math.random()*30 - 10); //产生的随机数范围在-10 - 10
        }
        System.out.println("产生的数组元素的值为:");  
        for(int i = 0;i < num;i ++){
            System.out.print(a[i] + " ");
        }
        System.out.print("\n");
        int []b = new int[a.length*2];  //定义一个数组b,b中的元素为a中元素重复两次
        System.out.println("生成的环形数组为:");
        for(int i = 0;i < b.length;i ++){
            b[i] = a[i % a.length];
            System.out.print(b[i] + " ");
        }
        System.out.print("\n");
         
        int sum = b[0],temp = b[0];//将数组最大值初始为b数组中第一个元素
        int s = 0;
        int i = 1;
        while(i < b.length / 2 + s)
        { 
            temp = temp + b[i];
            if(temp < b[i])
            {
                temp = b[i];
                s = i;
            }
            if(temp > sum)
            {
                sum = temp;
            }
            i ++;
        }
        System.out.println("最大的子数组为:" + sum);
    }  
}

运行截图: