zoukankan      html  css  js  c++  java
  • 最大子序列和问题--时间复杂度O(NlogN)

    最大子序列和问题--时间复杂度O(NlogN)

    package a;
    /*
     * 最大子序列和问题,时间复杂度O(NlogN)
     */
    public class Sequence {
        private static int maxSumRec(int[] a,int left,int right ){
            if(left==right)
                if(a[left]>0)
                    return a[left];
                else 
                    return 0;
            int center=(left+right)/2;
            int maxLeftSum =maxSumRec(a,left,center);//递归求前部分最大值
            int maxRightSum = maxSumRec(a,center+1,right);//递归求后部分最大值
            //求前半部分含最后一个元素的最大值
            int maxLeftBorderSum=0,leftBorderSum=0;
            for(int i=center;i>=left;i--){
                leftBorderSum+=a[i];
                if(leftBorderSum>maxLeftBorderSum)
                    maxLeftBorderSum=leftBorderSum;
            }
            //求后半部分含第一个元素的最大值
            int maxRightBorderSum=0,rightBorderSum=0;
            for(int i=center+1;i<=right;i++){
                rightBorderSum+=a[i];
                if(rightBorderSum>maxRightBorderSum)
                    maxRightBorderSum=rightBorderSum;
            }
            
            return max3(maxLeftSum,maxRightSum,maxLeftBorderSum+maxRightBorderSum);
        }
        //求最大值
        private static int max3(int maxLeftSum, int maxRightSum, int q) {
            // TODO Auto-generated method stub
            int max;
            if(maxLeftSum>maxRightSum)
                max=maxLeftSum;
            else
                max=maxRightSum;
            if(q>max)
                max=q;
            return max;
        }
        
        public static void main(String[] args){
            int[] a={4,-3,5,-2,-1,2,6,-2};
            System.out.println(maxSumRec(a, 0, a.length-1));
        }
    }
  • 相关阅读:
    【2】网站搭建:数据库选型
    【1】网站搭建:模型设计
    输入法评价
    站立会议个人博客六
    站立会议个人博客五
    站立会议个人博客四
    站立会议个人博客三
    第十一周学习进度表
    站立会议个人博客二
    典型用户和用户场景描述。
  • 原文地址:https://www.cnblogs.com/xtuxiongda/p/8711702.html
Copyright © 2011-2022 走看看