zoukankan      html  css  js  c++  java
  • 环形数组的最大子数组之和

      上次课老师留了求一个数组的最大子数组之和,这次题目要求变化了一下,数组变成了环形的数组。主要的设计思想利用动态规划,非环形数组的任意一个元素只要判断前面的元素之和是否大于0就可以了,环形数组则还要判断数组元素后面的元素之和与0的关系。既然是环形数组,每个元素都可能是开头,也可能是结尾。

    package Arraysum_circle;
    import java.math.*;
    public class FindClass_circle 
    {
        public static void main(String[] args)
        {
            int[] arr = {-1,3,5,-2,7};
            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 find(int[] array)
        {
            int array1[] = new int[array.length];
    //        for(int i = 1;i < array1.length;i++)
    //        {
    //            array1[i] = 0;
    //        }
            array1[0] = array[0];
            int maxVal = array[0];
            for(int i = 0;i < array.length - 1;i++)
            {
                //如果第i+1个元素的前i个元素之和大于0就把这i个元素的和加到第i+1个元素上面        即前i个元素对第i+1个元素有贡献
                if(array1[i] > 0)
                {
                    array1[i+1] = array1[i] + array[i+1];
                }
                //如果第i+1个元素的前i个元素之和小于0不加        即前i个元素对第i+1个元素没有贡献
                else
                {
                    array1[i+1] = array[i+1];
                }
                //更新最大值 
                maxVal = Math.max(maxVal,array1[i+1]);
            }
            return maxVal;
        }
        
        public static void changeArray(int[] array)
        {
            int index = array[array.length-1];
            for(int j = array.length-1;j > 0;j--)
            {
                array[j] = array[j-1];
            }
            array[0] = index;
        }
        
        
        public static int findCircleArray(int[] array1)
        {
            //记录最大子数组的和
            int maxNum = -1111;
            for(int j = 0;j < array1.length;j++)
            {
                maxNum = Math.max(find(array1),maxNum);
                changeArray(array1);
            }
            return maxNum;
        }
    }

  • 相关阅读:
    设计模式复习-简单工厂模式
    神经网络与机器学习 笔记—基本知识点(上)
    声明:songzijian这个域名已经被抢注。大家别上了。不是我了。
    《NO STRATEGY》《重塑战略》
    《THE LEAN STARTUP》 《精益创业》
    逆向与分析-WebBrowserPassView消息分析
    HTTP1.0,1.1,2.0,HTTPS
    Linux-鸟菜-7-Linux文件系统-EXT
    Linux-鸟菜-6-文件搜索
    反弹代理环境的搭建
  • 原文地址:https://www.cnblogs.com/1102whw/p/5379018.html
Copyright © 2011-2022 走看看