返回一个整数数组中最大子数组的和

本文介绍了一种寻找子数组中最大值的算法实现,通过单次遍历数组并使用两个辅助变量来达到O(n)的时间复杂度。文章还讨论了初始化变量时可能出现的问题及其解决方案,并提供了完整的Java代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

程序设计思想:

思路:
因为时间复杂度为O(n),则只能遍历一次数组
这里同时使用两个变量sum和max,其中sum保存的是当前的和,若sum<0
则从下一个位置从新记录,max记录的是历史的最大值
只有当sum>max时用sum替换max。

出现的问题:

在初始化max和sum的值时,把max初始化成了0,sum的值初始化成了数组的而第一个元素的值。

可能的解决方法:

应该把max的值初始化成数组的第一个元素的值,把sum的值初始化成0;

源代码:

public class IntArrayMax {
    
    public static void  MaxIntArray(int[] intArray) {
    

        int sum=0;
        int max=intArray[0];
        for(int i=0;i<intArray.length;i++){
            
            if(sum>=0){
                sum+=intArray[i];
            }else{
                sum=intArray[i];
            }
            if(sum>max){
                max=sum;
            }
        }
        System.out.println("子数组中的最大值:"+max);
    }

}
public class Invoke {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
        Random random=new Random();
        //int num=random.nextInt(10);
        int[] intArray=new int[10];
        System.out.print("随机数组:");
        for(int i=0;i<intArray.length;i++){
            intArray[i]=random.nextInt(10)-5;
            System.out.print(intArray[i]+"  ");
        }
        System.out.print("\n");
        IntArrayMax intArrayMax=new IntArrayMax();
        intArrayMax.MaxIntArray(intArray);

    }

}

结果截图:

 总结:

编程前应该先分析清楚题的意思,然后想好思路,进行编程。

转载于:https://www.cnblogs.com/andibier/p/7988421.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值