最大字段和问题

本人大学生一枚,最近做老师布置的作业:求一组整数的最大子段和 (例如{2,-1,4,-5,6,-3}) 以下是本人的作业代码:

public class Test_001 {

    public static void main(String[] args)throws Exception{  
        int array[] = {2,-1,4,-5,6,-3};//这里直接定义了数组,也可以输入
        int count,i,j; 
        int max = 0;
        count = 6;
        for(i=0;i<=count;i++)  
            for(j=i;j<count;j++)  
            {  
                int sum=0;  
                sum= sum + array[j];     
                if(sum>max){  
                    max=sum;                   
                }        
            }   
        System.out.println("数组的最大子段和胃"+max ); 
        }  
}

本来觉得自己的代码还不错,比其他同学的时间复杂度好。但是却没想到可以用动态规划优化。

static int maxSubsegment(int[] a,int n) {
        int temp = 0,maxn = 0,k=1;
        int start,end;
        for(int i = 0 ; i < n ;i++)
        {
            temp+=a[i];
            if(temp > maxn)
            {
                maxn = temp;start = k ;end = i;
            }
            if(temp < 0)
            {
                temp = 0;k = i+1;
            }
        }
        return maxn;
    }

小结:发现之前都是依葫芦画瓢的敲代码,并没有思考过为什么,导致经常有想当然就写了。然而方法不只有一种,不要固化自己的想法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值