为了账号安全,请及时绑定邮箱和手机立即绑定

求最大字段和的二种算法

标签:
Java 算法

意思暴力法,穷举出各种字段和情况,求出结果,想法通俗易懂,就是效率太低了.

package day20180506;
public class FileSum {

    public static void main(String[] args) {
        int[] arr= {1,-2,6,10,-8,9};
        int max=getMaxFile(arr);
    }

       static int  getMaxFile(int[] arr) {

           int max=0;
           int sum=0;
           for(int i=0; i<arr.length; i++)
           {
               for(int j=i; j<arr.length; j++)
               {
                   sum=getSum(arr,i,j);
                   if(sum>max) 
                    max=sum; 
               }     
           }   
        System.out.println("max="+max);
         return max;
     }

       static int getSum(int[] arr,int i,int j)
       {
           int sum=0;
          for(int n=i; n<=j; n++) 
           sum+=arr[n];
         return sum;
       }

}
max=17

>这个方法,靠理解了,就是分治法

package day20180506;

public class GetFilemax {

    public static void main(String[] args) {

            int[] arr= {1,-2,6,10,-8,9};
            System.out.println("sum="+max(arr,0,arr.length-1));
    }

    public static int max(int[] arr,int left,int right)
    {
        int max=0,sum=0,midsum=0,leftsum=0,rightsum=0;
        int s1,s2,lefts,rights;
        int mid;
    //递归出口很重要
        if(left==right)
        {
            sum=arr[left];
        }else
        {
        //划分
        mid=(left+right)/2;
        leftsum=max(arr,left,mid);  //左部和
        rightsum=max(arr,mid+1,right); //右部分和

        s1=0;lefts=0;
        //左部和
        for(int i=mid; i>=left; i--)
        {
            lefts+=arr[i];
            if(lefts>s1)
            s1=lefts;
        }

        //右部分和
        s2=0; rights=0;
        for(int i=mid+1; i<=right; i++)
        {
            rights+=arr[i];
            if(rights>s2)
            s2=rights;
        }

        midsum=s1+s2;
        if(midsum>leftsum)
            sum=midsum;
        else sum=leftsum;
        if(rightsum>sum)
            sum=rightsum;   
        }

        return sum;
    }

}

sum=17

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
全栈工程师
手记
粉丝
73
获赞与收藏
369

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消