码迷,mamicode.com
首页 > 编程语言 > 详细

环形数组的最大子数组之和

时间:2016-04-11 17:00:04      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

  上次课老师留了求一个数组的最大子数组之和,这次题目要求变化了一下,数组变成了环形的数组。主要的设计思想利用动态规划,非环形数组的任意一个元素只要判断前面的元素之和是否大于0就可以了,环形数组则还要判断数组元素后面的元素之和与0的关系。把数组复制一遍,用另外一个数组记录,从每个数组元素开头的子数组元素的个数不能超过数组的元素个数,否则就会多加某些元素。

package Arraysum_circle;
import java.math.*;
public class FindClass_circle 
{
    public static void main(String[] args)
    {
        int[] arr = {9,2,-39,34,5,26,-8};
        for(int i = 0;i < arr.length;i++)
        {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        int result = Find_circle.findCircleArray(arr);
        System.out.println("最大子数组之和为:"+result);
    }
}

class Find_circle
{
    public static int findCircleArray(int[] array1)
    {
        //记录最大子数组的和
        int maxNum;
        //记录数组的长度
        int size = array1.length;
        int[] array2 = new int[2*array1.length];
        int[] array3 = new int[2*array1.length];
        //array2是两个相同的array1连接起来的
        for(int i = 0;i < array1.length;i++)
        {
            array2[i] = array1[i];
        }
        int len = array1.length;
        for(int i = len;i < 2*len;i++)
        {
            array2[i] = array1[i-len];
        }
        
        maxNum = array2[0];
        array3[0] = array2[0];
        //记录最大子数组的长度不能超过数组的长度 初始化为1
        int sonArrayLen = 1;
        for(int i = 0;(i < array2.length-1) && (sonArrayLen < size);i++)
        {
            if(array3[i] > 0)
            {
                array3[i+1] = array3[i] + array2[i+1];
                //连加一次最大子数组的长度就增加1
                sonArrayLen++;
            }
            else
            {
                array3[i+1] = array2[i+1];
                //从头加的话最大子数组的长度恢复为1
                sonArrayLen = 1;
            }
            maxNum = Math.max(maxNum,array3[i+1]);
        }
        return maxNum;
    }
}

技术分享

技术分享技术分享

环形数组的最大子数组之和

标签:

原文地址:http://www.cnblogs.com/1102whw/p/5379018.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!