zoukankan      html  css  js  c++  java
  • 求一维数组最大最大子数组和

    1、设计思想:在while循环里,用 i 控制数组的首位,用 j 控制数组的长度,这样就可以在一个循环里遍历所有子数组,并在循环里求出最大子数组

    2、代码

    public class MaxValueOfSubArray {
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            int array[] = {2,3,-4,5,-3,-8,7,1,-3};            
            int len = array.length;
            int sum = 0;                            
            for(int i = 0; i < len; i++)
            {
                //求出从i到i+len之间的最大子数组值,如果i+len大于数组长度,则对数组长度取余数
                int temp = getMaxSubArray(array, i, i+len);
                //更新最大子数组的值
                if(temp > sum)
                    sum = temp;
                System.out.print(array[i]+" ");
            }
            System.out.println("最大子数组之和为:"+sum);
        }
        
        public static int getMaxSubArray(int[] array,int begin,int end)
        //求数组array在下标begin和end之间的最大子数组之和,如果下标越界,则取下标对数组长度的余数
        {
            int len = array.length;                //求出数组的长度
            if(len <= 0)                        //如果数组不是有效的数组,则返回一个无效的值
                return -1111111111;
            int sum = array[begin];                //sum用来存放子数组之和的最大值,首先赋值为第一个数
            int mark = sum;                        //mark用来标识当前子数组之和,初始化为第一个数
            for(int i = begin+1; i < end; i++)
            {
                if(mark > 0)                    //如果当前子数组之和大于0,则mark加上当前的数字
                    mark += array[i%len];
                else                             //如果当前子数组之和小于等于0,则mark从当前数字重新计数
                    mark = array[i%len];    
                if(sum < mark)                    //更新sum的值
                    sum = mark;
            }
            return sum;
        }
        
    }

    3、程序截图:

    4、出现的问题:下表越界,子数组遍历不全

  • 相关阅读:
    poj 1200 crasy search
    cdoj 1092 韩爷的梦
    fzu 2257 saya的小熊饼干
    zoj 3950 how many nines
    zoj 3963 heap partion
    fzu 2256 迷宫
    fzu 2253 salty fish
    hdu 2473 Junk-Mail Filter
    codeforces 129B students and shoes
    hdu 3367 Pseudoforest
  • 原文地址:https://www.cnblogs.com/shouhutian/p/6653334.html
Copyright © 2011-2022 走看看